关于这个查询和索引,我有个问题。
我的问题是:
EXPLAIN SELECT * FROM s1_training where amt > 0 LIMIT 500
我编制了索引(amt),但如果我有以下情况,则不会生效:
WHERE amt != 0
WHERE amt > 0
WHERE amt < 0
结果是:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE s1_training ALL amt NULL NULL NULL 64 Using where
使用索引的唯一方法是设置
WHERE amt = number ( like amt = 2 )
结果会是
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE s1_training ref amt amt 4 const 1
提前谢谢你的帮助
谨致问候。
最佳答案
它取决于行数和值的基数。
例如,如果大多数值都>0
,那么mysql优化器将决定进行表扫描,因为这样做更快。
对于第二个条件WHERE amt=2
这可能会返回更少的值,因此使用索引是因为更快。
关于mysql - mysql表索引不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27764111/