sql >> Databasteknik >  >> RDS >> Mysql

MySQL Finns det en gräns för InnerJoin?

Du har inte i närheten av gränsen för JOINs för MySQL. Ditt antal anslutningar är inte dåligt. Men att gå med i en härledd tabell (din inre underfråga) som du gör kan orsaka prestandaproblem, eftersom härledda tabeller inte har index. Att utföra en join på en härledd tabell utan index kan vara långsamt.

Du bör överväga att skapa en riktig temporär tabell med index för att gå med, eller komma på ett sätt att undvika underfrågan.

En JOIN i MySQL är i grunden som att göra en uppslagning (sök) för varje sammanfogad rad. Så MySQL måste utföra många uppslagningar om du går med i många poster. Det är mindre om hur många tabeller du går med i än antalet rader du går med som kan vara ett problem.

Hur som helst, MySQL kommer bara att utföra så många sökningar innan det kommer att ge upp och bara läsa hela tabellen. Den gör ett ganska bra jobb med att bestämma vilken som är billigare.

Det kanske bästa du kan göra är att hjälpa den att gissa genom att uppdatera indexstatistiken med ANALYSE TABELL.

Du kan ha en WHERE-sats per SELECT. Så din inre delfråga kommer att ha en WHERE-sats och din yttre fråga kommer att ha en WHERE-sats, och dessa tillämpas efter JOIN (åtminstone logiskt, även om MySQL i allmänhet kommer att tillämpa dem först för prestanda).

Allt detta förutsätter också att du vet hur man använder index på rätt sätt.



  1. Inkluderar MS SQL Servers mellan intervallgränserna?

  2. Hur kan jag köra många frågor på en sida?

  3. Hur lagrar man bilder i en varbinär(max) kolumn?

  4. Jämför värden för tidsstämplar och tilldela ett värde till var och en av dem om de har ändrats