sql >> Database teknologi >  >> RDS >> Mysql

MySQL Er der en grænse for InnerJoin?

Du har ikke i nærheden af ​​grænsen for JOINs til MySQL. Dit antal joinforbindelser er ikke dårligt. Dog kan tilslutning til en afledt tabel (din indre underforespørgsel), som du gør, forårsage ydeevneproblemer, da afledte tabeller ikke har indekser. Det kan være langsomt at udføre en join på en afledt tabel uden indekser.

Du bør overveje at lave en rigtig midlertidig tabel med indekser til at deltage, eller finde ud af en måde at undgå underforespørgslen på.

Et JOIN i MySQL er i bund og grund som at lave et opslag (seek) for hver tilsluttet række. Så MySQL bliver nødt til at udføre mange opslag, hvis du tilslutter dig mange poster. Det er mindre om, hvor mange tabeller du tilslutter dig, end antallet af rækker, du tilslutter dig, der kan være et problem.

Anyway, MySQL vil kun udføre så mange søgninger, før den giver op og bare læser hele tabellen. Det gør et ret godt stykke arbejde med at beslutte, hvad der vil være billigere.

Måske er det bedste, du kan gøre, hjælpe det med at gætte ved at opdatere indeksstatistikken med ANALYSE TABEL.

Du kan have én WHERE-sætning pr. SELECT. Så din indre underforespørgsel vil have en WHERE-klausul, og din ydre forespørgsel vil have en WHERE-klausul, og disse bliver anvendt efter JOIN (i det mindste logisk, selvom MySQL generelt vil anvende dem først for ydeevne).

Alt dette forudsætter også, at du ved, hvordan man bruger indekser korrekt.



  1. Brug OBJECTPROPERTY() til at finde ud af, om en tabel er en systemtabel i SQL Server

  2. Sådan dræber du MySQL-forbindelser

  3. Henter Lås ventetimeout overskredet; prøv at genstarte transaktionen, selvom jeg ikke bruger en transaktion

  4. Indstil tegnsættet og samlingen af ​​en database i MariaDB