SELECT语句不使用possible_keys

Pau*_*and 10 mysql indexing select explain

我有一个遗留系统的表,没有主键.它记录了工厂发布材料的交易数据.

为简单起见,我们可以说每行包含job_number,part_number,quantity&date_issued.

我在日期发布列中添加了一个索引.当我运行EXPLAIN SELECT*FROM issued_pa​​rts WHERE date_issued>'20100101'时,它显示如下:

+----+-------------+----------------+------+-------------------+------+---------+------+---------+-------------+
| id | select_type | table          | type | possible_keys     | key  | key_len | ref  | rows    | Extra       |
+----+-------------+----------------+------+-------------------+------+---------+------+---------+-------------+
|  1 | SIMPLE      | issued_parts   | ALL  | date_issued_alloc | NULL | NULL    | NULL | 9724620 | Using where |
+----+-------------+----------------+------+-------------------+------+---------+------+---------+-------------+

所以它看到了关键,但它不使用它?有人可以解释原因吗?

Rol*_*DBA 10

有些东西告诉我MySQL Query Optimizer正确决定了.

这是你怎么说的.运行这些:

行数

SELECT COUNT(1) FROM issued_parts;
Run Code Online (Sandbox Code Playgroud)

匹配您的查询的行数

SELECT COUNT(1) FROM issued_parts WHERE date_issued > '20100101';
Run Code Online (Sandbox Code Playgroud)

如果您实际检索的行数超过表总数的5%,则MySQL查询优化器会决定执行全表扫描的工作量会减少.

现在,如果您的查询更精确,例如,使用以下内容:

SELECT * FROM issued_parts WHERE date_issued = '20100101';
Run Code Online (Sandbox Code Playgroud)

那么,你将完全得到一个不同的EXPLAIN计划.