【问题标题】:Mysql Query Performance (difference between 2 queries) [duplicate]Mysql查询性能(2个查询之间的差异)[重复]
【发布时间】: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 子句是否相同。

标签: mysql


【解决方案1】:

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

【讨论】:

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

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

第一个

'>=' 是单次算术运算

第二个

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

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

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多