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

Hvorfor bruger MySQL ikke et indeks til en større end sammenligning?

Du ville nok være bedre stillet ved at lade MySql bestemme forespørgselsplanen. Der er en god chance for, at en indeksscanning ville være mindre effektiv end en fuld tabelscanning.

Der er to datastrukturer på disken til denne tabel

  1. Selve tabellen; og
  2. Den primære nøgle B-Tree indeks.

Når du kører en forespørgsel, har optimeringsværktøjet to muligheder for, hvordan du får adgang til dataene:

SELECT * FROM userapplication WHERE application_id > 1025;

Brug af indekset

  1. Scan B-Tree-indekset for at finde adressen på alle rækker, hvor application_id > 1025
  2. Læs de relevante sider i tabellen for at få data for disse rækker.

Bruger ikke indekset

Scan hele tabellen, og vælg de relevante poster.

Valg af den bedste strategi

Forespørgselsoptimeringsopgaven er at vælge den mest effektive strategi til at få de data, du ønsker. Hvis der er mange rækker med et application_id > 1025 så kan det faktisk være mindre effektivt at bruge indekset. For eksempel hvis 90 % af posterne har et application_id > 1025 så skulle forespørgselsoptimeringsværktøjet scanne omkring 90 % af bladknuderne i b-træets indeks og derefter læse mindst 90 % af tabellen også for at få de faktiske data; dette ville involvere læsning af flere data fra disken end blot at scanne tabellen.



  1. Deaktiver midlertidigt alle begrænsninger for fremmednøgle

  2. mysql hierarkilager med store træer

  3. Strømafbrydelser med EMCLI

  4. VÆLG I en tabelvariabel i T-SQL