MySQL不会在简单的选择查询中使用我定义的索引
作者:互联网
我一直在尝试在我的查询中使用索引,但无济于事.它已定义,但未使用.
这是我的索引
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行.
有任何想法吗?谢谢
解决方法:
只是一个猜测:您的日期列的类型是什么?是否有可能,值1336312075不是日期类型?在这种情况下,db可以将日期列中的所有值转换为1336312075类型,而不是将1336312075转换为可能使索引无效的日期列类型.
可能的解决方案:将您的值转换为日期列的类型:
where date > convert_to_the_type_of_date_column(1336312075)
标签:mysql,sql,database-indexes 来源: https://codeday.me/bug/20190626/1290053.html