sql >> Databáze >  >> RDS >> Mysql

Proč MySQL nepoužívá index pro srovnání větší než?

Pravděpodobně by bylo lepší nechat MySql rozhodnout o plánu dotazů. Existuje velká šance, že provádění skenování indexu by bylo méně efektivní než skenování celé tabulky.

Pro tuto tabulku jsou na disku dvě datové struktury

  1. Samotný stůl; a
  2. Index B-stromu primárního klíče.

Když spustíte dotaz, má optimalizátor dvě možnosti přístupu k datům:

SELECT * FROM userapplication WHERE application_id > 1025;

Použití indexu

  1. Naskenujte index B-Tree a najděte adresy všech řádků, kde application_id > 1025
  2. Přečtěte si příslušné stránky tabulky, abyste získali data pro tyto řádky.

Nepoužíváte index

Prohledejte celou tabulku a vyberte příslušné záznamy.

Výběr nejlepší strategie

Úkolem optimalizátoru dotazů je vybrat nejúčinnější strategii pro získání požadovaných dat. Pokud existuje mnoho řádků s application_id > 1025 pak může být použití indexu méně efektivní. Pokud má například 90 % záznamů application_id > 1025 pak by optimalizátor dotazů musel proskenovat přibližně 90 % listových uzlů indexu b-stromu a poté také přečíst alespoň 90 % tabulky, aby získal skutečná data; to by znamenalo čtení více dat z disku než pouhé skenování tabulky.



  1. Získat seznam všech tabulek v Oracle?

  2. Konfigurace vyhrazené sítě pro komunikaci skupiny dostupnosti

  3. SQL Server FOR XML Path vytvořit opakující se uzly

  4. Připojení PDO bez názvu databáze?