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

MySQL holder op med at bruge indeks, når der tilføjes yderligere begrænsninger

Det er lidt svært at forklare.

Forespørgslen, der bruger indekset, bruger det, fordi indekset er et "dækkende" indeks. Det vil sige, at alle kolonnerne i indekset er i forespørgslen. Den eneste del af indekset, der virkelig bliver brugt effektivt, er tilstanden på latitude .

Normalt ville et dækkende indeks kun have kolonnerne nævnt i forespørgslen. Den primære nøgle bruges dog til at referere til posterne, så jeg gætter på, at users.Id er den primære nøgle på bordet. Og indekset bliver scannet for gyldige værdier for latitude .

Forespørgslen, der ikke bruger indekset, bruger det ikke af to årsager. For det første er betingelserne på søjlerne uligheder. En indekssøgning kan kun bruge lighedsbetingelser og én ulighed. Det betyder, at indekset kun kunne bruges til latitude i sin mest effektive metode. For det andet kræver de yderligere kolonner i forespørgslen alligevel at gå til datasiden.

Med andre ord siger optimeringsværktøjet i virkeligheden:"Hvorfor gider gå til indekset for at scanne gennem indekset og derefter scanne datasiderne? I stedet kan jeg bare scanne datasiderne og få alt på én gang."

Dit næste spørgsmål er uden tvivl:"Men hvordan gør jeg min forespørgsel hurtigere?" Mit forslag ville være at undersøge rumlige indekser .




  1. Flere forespørgsler VS Stored Procedure

  2. Sådan udføres Stored Procedures med Doctrine2 og MySQL

  3. Opdater forespørgsel if-sætning til Oracle

  4. Sådan fungerer LTRIM_ORACLE() i MariaDB