【问题标题】:MySQL query optimization on WHERE clause对 WHERE 子句的 MySQL 查询优化
【发布时间】:2017-10-29 19:00:39
【问题描述】:

在 MySQL 查询的 WHERE 子句中排列数据的方式是否有任何性能优势? 例如,在此示例中,categoryid 列已编入索引

SELECT something 
FROM table 
WHERE date 
BETWEEN "date1" 
AND "date2" 
AND categoryid = "2"

VS

SELECT something 
FROM table 
WHERE categoryid = 2
AND date 
BETWEEN "date1" 
AND "date2"

会有任何性能差异吗?谢谢

【问题讨论】:

    标签: mysql database performance


    【解决方案1】:

    如果您关心性能,请考虑索引。对于这个查询:

    SELECT something 
    FROM table 
    WHERE categoryid = 2 AND
          date BETWEEN @date1 AND @date2  -- I'm assuming these are constants
    

    您希望在(categoryid, date) 上建立索引。如果你想要性能,那就是你应该做的。无论WHERE 子句中条件的顺序如何,MySQL 都会使用该索引。

    对于没有索引的查询,没有什么区别。无论如何,评估顺序的任何差异都可能被运行查询的开销所淹没。

    【讨论】:

    • 感谢您的帮助!单个表的索引是否有限制?
    • 不知道你说的“限制”是什么意思,但是支持多列多索引。
    • 抱歉,我的意思是,在一个总共有 20 列的表中拥有多个索引(比如说 5 个索引列)是一种好习惯吗?
    • 每个索引都会增加一些插入和更新的开销,并且还会消耗磁盘空间和 RAM。所以你应该避免创建无用的索引。但是,每个表都有许多有用的索引是很常见的。
    • 谢谢!,我猜性能 > 空间和内存,在 Web 应用程序中 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多