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
- Sam stół; i
- 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
- Przeskanuj indeks B-Tree, aby znaleźć adres wszystkich wierszy, w których
application_id > 1025
- 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.