MySQL不会在简单的选择查询中使用我定义的索引

时间:2012-06-13 10:09:15

标签: mysql sql database-indexes

我一直在尝试在查询中使用索引,但无济于事。它已定义,但未使用。

以下是我的索引

Table  | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment  
--------------------------------------------------------------------------------------------------------------------------------------------------------
alerts |          1 | date_index |            1 | date        | A         |        9825 |     NULL | NULL   |      | BTREE   

这是我的查询+解释:

EXPLAIN SELECT latitude, longitude, msg_id
        FROM alerts
        FORCE INDEX(date_index)
        WHERE date>1336312075;


| id | select_type | table  | type | possible_keys | key  | key_len | ref  | rows | Extra       |
--------------------------------------------------------------------------------------------------------
|  1 | SIMPLE      | alerts | ALL  | date_index    | NULL | NULL    | NULL | 9825 | Using where |

该表有9825行,我选择的日期是最新的9 ....所以它应该只扫描了9行。

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:4)

只是一个猜测:您的date列的类型是什么?是否有可能,1336312075值不属于date类型?在这种情况下,db可以将date列中的所有值转换为1336312075类型,而不是将1336312075转换为date列的类型,这可能会导致索引无效。

可能的解决方案:将您的值转换为date列的类型:

where date > convert_to_the_type_of_date_column(1336312075)