sql >> Database >  >> RDS >> Mysql

MySQL Is er een limiet voor InnerJoin?

Je hebt nergens in de buurt van de limiet van JOINs voor MySQL. Je aantal joins is niet slecht. Deelnemen aan een afgeleide tabel (uw innerlijke subquery) terwijl u dat doet, kan echter prestatieproblemen veroorzaken, aangezien afgeleide tabellen geen indexen hebben. Het uitvoeren van een join op een afgeleide tabel zonder indexen kan traag zijn.

Je zou kunnen overwegen om een ​​echte tijdelijke tabel te maken met indexen om mee te doen, of een manier bedenken om de subquery te vermijden.

Een JOIN in MySQL is in feite hetzelfde als het opzoeken (zoeken) voor elke samengevoegde rij. MySQL zal dus veel zoekopdrachten moeten uitvoeren als u zich bij veel records voegt. Het gaat niet zozeer om het aantal tafels waaraan u deelneemt, maar om het aantal rijen waaraan u deelneemt, wat een probleem kan zijn.

Hoe dan ook, MySQL zal slechts zo veel zoekopdrachten uitvoeren voordat het het opgeeft en de hele tabel leest. Het kan redelijk goed beslissen welke goedkoper zal zijn.

Misschien is het beste wat je kunt doen het raden door de indexstatistieken bij te werken met ANALYSE TABLE.

U kunt één WHERE-component per SELECT hebben. Dus je innerlijke subquery zal een WHERE-clausule hebben en je buitenste query zal een WHERE-clausule hebben, en deze worden toegepast na de JOIN (althans logisch, hoewel MySQL ze over het algemeen eerst zal toepassen voor prestaties).

Dit alles veronderstelt ook dat je weet hoe je indexen op de juiste manier gebruikt.



  1. Haal de vorige en volgende rij op uit rijen die zijn geselecteerd met (WHERE) voorwaarden

  2. SQL-rangpercentiel

  3. Hoe id-set van 1 updaten?

  4. Willekeurige PRIMAIRE SLEUTEL voor Innodb