关于这个查询和索引,我有个问题。
我的问题是:

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/

10-09 23:18