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

Dyr fuld bordscanning på vælg alle uden betingelse

Se nedenstående link for flere detaljer

https://dev.mysql.com/doc /refman/8.0/da/table-scan-avoidance.html

Årsagen til fuld tabelscanning er nedenfor

  • Tabellen er så lille, at det er hurtigere at udføre en tabelscanning end at genere et nøgleopslag. Dette er almindeligt for tabeller med færre end 10 rækker og en kort rækkelængde.

  • Der er ingen brugbare begrænsninger i ON- eller WHERE-udtrykket for indekserede kolonner.

  • Du sammenligner indekserede kolonner med konstante værdier, og MySQL har beregnet (baseret på indekstræet), at konstanterne dækker for stor en del af tabellen, og at en tabelscanning ville være hurtigere

  • Du bruger en nøgle med lav kardinalitet (mange rækker matcher nøgleværdien) gennem en anden kolonne. I dette tilfælde antager MySQL, at det ved at bruge nøglen sandsynligvis vil foretage mange nøgleopslag, og at en tabelscanning ville være hurtigere.

for at undgå fuld tabelscanning, brug nedenfor:

  • Brug ANALYSE TABLE tbl_name til at opdatere nøglefordelingerne for den scannede tabel.

  • Brug FORCE INDEX til den scannede tabel for at fortælle MySQL, at tabelscanninger er meget dyre sammenlignet med at bruge det givne indeks:

    for eksempel. VÆLG * FRA t1, t2 FORCE INDEX (indeks_for_kolonne) HVOR t1.col_name=t2.col_name;




  1. Hvordan bruger man CASE Statement i MySQL?

  2. SQL til sletteforespørgsel

  3. SQL, Hjælpetabel over tal

  4. REMAINDER() Funktion i Oracle