SELECT语句不使用possible_keys

我有一个遗留系统的表,没有主键。它记录了工厂发布材料的交易数据。 为了简单起见,我们可以说每行包含job_number,part_number,quantity&发行日期。 我在日期发布列中添加了一个索引。当我运行EXPLAIN SELECT * FROM issued_pa​​rts WHERE date_issued>'20100101'时,它显示如下: + ---- + ------------- + ---------------- + ------ + ------ ------------- + ------ + --------- + ------ + --------- + - ----------- + | id | select_type |表|类型| possible_keys |关键| key_len | ref |行|额外的| + ---- + ------------- + ---------------- + ------ + ------ ------------- + ------ + --------- + ------ + --------- + - ----------- + | 1 |简单| issued_pa​​rts |所有| date_issued_alloc | NULL | NULL | NULL | 9724620 |使用何处| + ---- + ------------- + ---------------- + ------ + ------ ------------- + ------ + --------- + ------ + --------- + - ----------- + 所以它看到了关键,但它不使用它? 有人可以解释原因吗?     
已邀请:
有些东西告诉我MySQL Query Optimizer正确决定了。 这是你怎么说的。运行这些: 行数
SELECT COUNT(1) FROM issued_parts;
匹配您的查询的行数
SELECT COUNT(1) FROM issued_parts WHERE date_issued > '20100101';
如果您实际检索的行数超过表总数的5%,则MySQL查询优化器会决定执行全表扫描的工作量会减少。 现在,如果您的查询更精确,例如,使用以下内容:
SELECT * FROM issued_parts WHERE date_issued = '20100101';
那么,你将完全得到一个不同的EXPLAIN计划。     
possible_keys
为具有相关列的键命名,但这并不意味着其中的每个键对查询都有用。在这种情况下,没有。     
有多种类型的索引(索引?)。哈希索引是对给定特定值的项进行查找的快速方法。如果你有一堆你要查询的谨慎值(例如,10个日期的列表),那么你可以为每个值计算一个哈希值,并在索引中查找它们。由于您没有对特定值进行查找,而是进行比较,因此哈希索引不会对您有所帮助。 另一方面,B-Tree索引可以帮助您,因为它为它正在索引的元素提供了排序。例如,请参阅此处:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html for mysql(搜索B-Tree索引特征)。您可能想要检查您的表是否正在为其索引列使用b-tree索引。     

要回复问题请先登录注册