Почему оптимизатор использует тип «ВСЕ» вместо типа «индекс»?

0

В настоящее время я изучаю execution plan в MySql.
И я использую данные дампа здесь.

https://dev.mysql.com/doc/employee/en/sakila-structure.html

Я добавил новый индекс from_date области dept_emp таблицы, названной ix_fromdate.
И я набрал как ниже

EXPLAIN
SELECT *
FROM dept_emp
WHERE from_date>='1985-01-01'  

Результат выполнения, как показано ниже
Изображение 174551

Я понимаю, что значение rows поэтому количество строк этой таблицы и оптимизатор не используют индекс range.
И.. я думаю, type должен быть index, но ALL.
Почему они выполнили table full scan?
Там индекс для ix_fromdate, почему они не использовали его?
Я знаю, что index full scan лучше, чем table full scan...
Знаю ли я это неправильно?

Теги:
indexing

1 ответ

0
Лучший ответ
  • Даже если у вас есть INDEX(from_date)?
  • Но более 20% таблицы удовлетворяет WHERE from_date>='1985-01-01'?

Затем Оптимизатор решает, что, вероятно, быстрее просто сканировать данные, фильтруя по мере их появления. Альтернатива (с использованием индекса) может быть дорогостоящей из-за подпрыгивания между индексом BTree и данными BTree.

Используйте более новую дату; Оптимизатор может изменить свое мнение и использовать индекс.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню