mysql表索引不影响

标签 mysql

我对这个查询和索引有疑问

我的查询是:

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表索引不影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27764111/

相关文章:

mysql - 数据库连接失败: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

c# - 尝试插入数据表的数组值时出现 SQL 语法错误

mysql - 我有 2 个表,我试图随机选择另一个表中不存在的值,但我无法让它工作

mysql - 此数据的最有效数据库设计

mysql - 使用 Rails 上的 created_at 数据对数组进行排序(使用 sort_by { |x| x.created_at } 它只是保持相同的方式

mysql - 如何估计已知列范围的 MYSQL 数据库大小

php - 大崩OrgChart格式数组

mysql - 使用 in 子句连接两个表

mysql - WEBrick Rails 服务器无法启动

java spring 连接到 mysql 数据库(不是 JNDI 池或系统数据源!)