sql >> Databasteknik >  >> RDS >> Mysql

Varför använder MySQL inte ett index för en större än jämförelse?

Du skulle förmodligen vara bättre att låta MySql bestämma över frågeplanen. Det finns en god chans att en indexskanning skulle vara mindre effektiv än en heltabellsgenomsökning.

Det finns två datastrukturer på disken för den här tabellen

  1. Själva tabellen; och
  2. Primärnyckel B-Tree index.

När du kör en fråga har optimeraren två alternativ för hur du kommer åt data:

SELECT * FROM userapplication WHERE application_id > 1025;

Använda indexet

  1. Skanna B-Tree-indexet för att hitta adressen till alla rader där application_id > 1025
  2. Läs lämpliga sidor i tabellen för att få information om dessa rader.

Använder inte indexet

Skanna hela tabellen och välj lämpliga poster.

Välja den bästa strategin

Frågeoptimerarens uppgift är att välja den mest effektiva strategin för att få den data du vill ha. Om det finns många rader med ett application_id > 1025 då kan det faktiskt vara mindre effektivt att använda indexet. Till exempel om 90 % av posterna har ett application_id > 1025 då skulle frågeoptimeraren behöva skanna runt 90 % av lövnoderna i b-trädets index och sedan läsa minst 90 % av tabellen också för att få de faktiska data; detta skulle innebära att läsa mer data från disken än att bara skanna tabellen.



  1. Hur man tar bort MySQL root-lösenord

  2. PostgreSQL-kontrollbegränsning för främmande nyckelvillkor

  3. Infinite Scroll med MySQL Data

  4. Vad är det korrekta sättet att använda node.js postgresql-modulen?