Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego MySQL nie używa indeksu do lepszego porównania?

Prawdopodobnie lepiej byłoby pozwolić MySql decydować o planie zapytań. Istnieje duża szansa, że ​​skanowanie indeksu byłoby mniej wydajne niż pełne skanowanie tabeli.

Na dysku znajdują się dwie struktury danych dla tej tabeli

  1. Sam stół; i
  2. Indeks klucza podstawowego B-Tree.

Po uruchomieniu zapytania optymalizator ma dwie opcje dostępu do danych:

SELECT * FROM userapplication WHERE application_id > 1025;

Korzystanie z indeksu

  1. Przeskanuj indeks B-Tree, aby znaleźć adres wszystkich wierszy, w których application_id > 1025
  2. Przeczytaj odpowiednie strony tabeli, aby uzyskać dane dla tych wierszy.

Nie używam indeksu

Zeskanuj całą tabelę i wybierz odpowiednie rekordy.

Wybór najlepszej strategii

Zadaniem optymalizatora zapytań jest wybranie najbardziej efektywnej strategii pozyskiwania żądanych danych. Jeśli istnieje wiele wierszy z application_id > 1025 wtedy użycie indeksu może być mniej wydajne. Na przykład, jeśli 90% rekordów ma application_id > 1025 wtedy optymalizator zapytań musiałby przeskanować około 90% węzłów liści indeksu b-drzewa, a następnie odczytać również co najmniej 90% tabeli, aby uzyskać rzeczywiste dane; wymagałoby to odczytania większej ilości danych z dysku niż tylko skanowanie tabeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Łączenie dwóch tabel w MySQL

  2. Jak tworzyć i usuwać bazy danych i tabele w MySQL

  3. #1221 — Nieprawidłowe użycie UPDATE i ORDER BY

  4. Sumowanie zakresu dat bez zliczania nakładania się w mysql

  5. asp.net / MySQL:Odmowa dostępu dla użytkownika ''@'localhost' (przy użyciu hasła:NIE)