Rozważmy następujący dwa wyjaśnia:Brak indeksu na! =?
EXPLAIN SELECT * FROM sales WHERE title != 'The'
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE sales ALL title NULL NULL NULL 41707 Using where
I -
EXPLAIN SELECT * FROM sales WHERE title = 'The'
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE sales ref title title 767 const 1 Using where
Dlaczego zapytania !=
mieć klucz NULL
? Dlaczego nie korzysta z title
? Co powoduje, że instrukcja =
może korzystać z indeksu, ale nie z !=
?
Aby rozwinąć na tym - Wybór Każdy wiersz, w którym tytuł nie jest "The", zwróci prawie każdy wiersz w tabeli, więc nie ma sensu używanie w ogóle indeksu dla tego zapytania. (Ponieważ będziesz musiał przeskanować całą tabelę, aby zwrócić wszystkie te wiersze.) – duskwuff