В настоящее время я изучаю execution plan
в MySql
.
И я использую данные дампа здесь.
Я добавил новый индекс from_date
области dept_emp
таблицы, названной ix_fromdate
.
И я набрал как ниже
EXPLAIN
SELECT *
FROM dept_emp
WHERE from_date>='1985-01-01'
Результат выполнения, как показано ниже
Я понимаю, что значение rows
поэтому количество строк этой таблицы и оптимизатор не используют индекс range
.
И.. я думаю, type
должен быть index
, но ALL
.
Почему они выполнили table full scan
?
Там индекс для ix_fromdate
, почему они не использовали его?
Я знаю, что index full scan
лучше, чем table full scan
...
Знаю ли я это неправильно?
INDEX(from_date)
?WHERE from_date>='1985-01-01'
?Затем Оптимизатор решает, что, вероятно, быстрее просто сканировать данные, фильтруя по мере их появления. Альтернатива (с использованием индекса) может быть дорогостоящей из-за подпрыгивания между индексом BTree и данными BTree.
Используйте более новую дату; Оптимизатор может изменить свое мнение и использовать индекс.