为什么优化使用' ALL'输入而不是'索引'类型?

时间:2018-04-05 14:23:28

标签: mysql indexing

我目前正在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'  

执行结果如下所示 enter image description here

我了解rows值更接近此表行数量且优化程序未使用range索引。
而且......我认为,type应该是index,而是ALL 为什么他们这样做table full scan? 有ix_fromdate的索引,为什么他们没有使用它呢? 我知道index full scan优于table full scan ...
我知道错了吗?

1 个答案:

答案 0 :(得分:0)

  • 即使你有INDEX(from_date)
  • 但超过约20%的表满足WHERE from_date>='1985-01-01'

然后,优化器决定简单地扫描数据可能会更快,过滤就可以了。由于索引BTree和数据BTree之间的反弹,替代方案(使用索引)可能成本高昂。

使用更新的日期;优化器可能会改变主意并使用索引。