Mysql查询性能(2个查询之间的差异)[重复]

Posted

技术标签:

【中文标题】Mysql查询性能(2个查询之间的差异)[重复]【英文标题】:Mysql Query Performance (difference between 2 queries) [duplicate] 【发布时间】:2019-12-05 18:10:00 【问题描述】:
SELECT * FROM table1 WHERE f1 >= 'a' ORDER BY f1 LIMIT 100;

SELECT * FROM table1 WHERE f1 ='a' OR f1 > 'a' ORDER BY f1 LIMIT 100;

第一个查询运行得非常快,第二个甚至根本没有返回。

table1 有复合主键 (f1,key2,key3,key4)

知道为什么吗?

【问题讨论】:

第二个没有; 这是由于算术评估而发生的。 '>=' 是一个算术运算。 因为 mysql 根本无法确定两个 where 子句是否相同。 【参考方案1】:

MySQL 必须查找两个条件是第二个查询。它首先满足,然后转移到另一个。而在第一个查询中,>= 被视为单个算术评估,与第二个查询相比,它的成本肯定会更低。

【讨论】:

但是,这两种情况下的解释查询给出完全相同的响应 因为两个查询的条件完全相同。【参考方案2】:

您使用不同的算术实现运行完全相同的条件。

第一个

'>=' 是单次算术运算

第二个

f1 ='a' 或 f1 > 'a' 现在我们有多个算术运算。它应该检查 f1 ='a'f1 > 'a' 分别又想检查 OR 条件。

所以肯定第一个查询执行得很快。

【讨论】:

以上是关于Mysql查询性能(2个查询之间的差异)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

两个相似查询的巨大速度差异(MySQL ORDER 子句)

为啥这两个查询之间的性能增益存在差异?

MySQL取两个字段之间的差异

SQLITE 3.7.13 和 3.8.0 之间的性能差异

CTE、子查询、临时表或表变量之间是不是存在性能差异?

MySQL使用默认值与在查询中设置值是不是有任何性能差异?