Se länken nedan för mer information
https://dev.mysql.com/doc /refman/8.0/en/table-scan-avoidance.html
orsaken till fullständig tabellskanning finns nedan
-
Tabellen är så liten att det går snabbare att utföra en tabellskanning än att besvära sig med en nyckelsökning. Detta är vanligt för tabeller med färre än 10 rader och en kort radlängd.
-
Det finns inga användbara begränsningar i ON- eller WHERE-satsen för indexerade kolumner.
-
Du jämför indexerade kolumner med konstanta värden och MySQL har beräknat (baserat på indexträdet) att konstanterna täcker en för stor del av tabellen och att en tabellsökning skulle gå snabbare
-
Du använder en nyckel med låg kardinalitet (många rader matchar nyckelvärdet) genom en annan kolumn. I det här fallet antar MySQL att genom att använda nyckeln kommer den förmodligen att göra många nyckeluppslagningar och att en tabellsökning skulle vara snabbare.
för att undvika genomsökning av hela tabellen använd nedan:
-
Använd ANALYSE TABELL tbl_name för att uppdatera nyckeldistributionerna för den skannade tabellen.
-
Använd FORCE INDEX för den skannade tabellen för att tala om för MySQL att tabellskanningar är mycket dyra jämfört med att använda det givna indexet:
t.ex. VÄLJ * FRÅN t1, t2 FORCE INDEX (index_for_column)WHERE t1.col_name=t2.col_name;