【问题标题】:MySQL Integer comparison speed (= vs <>)MySQL 整数比较速度(= vs <>)
【发布时间】:2016-05-10 00:02:00
【问题描述】:

我有一个带有“活动”字段的表格。 Active 是一个索引的 tinyint(4),但只包含 1 或 0 的值。我知道...不是很好的设计,但我继承了这个系统来维护。

如果有帮助,此表有 175277 条记录。

当我跑步时:

SELECT * FROM table WHERE active = 1;

需要 0.497 秒。

但是当我运行时

SELECT * FROM table WHERE active <> 0; 

(active 必须等于 1,因为这是唯一可能的其他值。)

只需要 0.095 秒。

我正在做一些查询优化并注意到这一点,想知道为什么?

【问题讨论】:

  • 数据库如何知道它是其中之一?所以这两个语句不一样
  • EXPLAIN 回答了它。引擎决定使用不同的密钥。谢谢!

标签: mysql sql optimization integer comparison


【解决方案1】:

解决了!

如上所述,我使用EXPLAIN 来查看查询在做什么,结果发现引擎决定为每个查询使用不同的键。

【讨论】:

  • 当索引具有像这样的低基数时,优化器可以确定索引查找的效率低于仅扫描整个表。有时这是对的,有时是错的。有时ANALYZE TABLE 会导致索引统计发生偏移,导致相同的查询使用不同的计划。
猜你喜欢
  • 2020-08-06
  • 2019-03-07
  • 2020-05-10
  • 1970-01-01
  • 2011-10-21
  • 2016-06-25
  • 2017-11-15
  • 2011-02-19
  • 2012-09-15
相关资源
最近更新 更多