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个查询之间的差异)[重复]的主要内容,如果未能解决你的问题,请参考以下文章