【问题标题】:MySQL query performance improvement?MySQL查询性能提升?
【发布时间】:2014-04-02 23:55:26
【问题描述】:

我有一个类似于以下的 MySQL 查询:

SELECT `col1`, `col2`
FROM `mytable`
WHERE `col3` = "stuff"
ORDER BY `hour_col` DESC, `minute_col` DESC, `second_col` DESC
LIMIT 1

但由于我只需要返回的第一行,因此似乎有一种更有效的方法可以做到这一点。有什么想法吗?

此外,小时、分钟和秒列需要保持单独的列(换句话说,我不能将它们存储为单个 Time 数据类型)。

【问题讨论】:

  • 这有什么低效的?顺便说一句,你可以只做LIMIT 1。当您为 LIMIT 指定一个参数时,该值指定从结果集开头返回的行数。
  • 我认为仅按顺序进行操作似乎效率低下,因为我只需要一行。
  • 如果您不执行ORDER BY,则无法保证您将始终获得相同的行。 stackoverflow.com/a/6314893/1086938
  • 正确。我真的只是想看看是否有人认为有更好的方法可以获得相同的结果。
  • 索引在哪里?解释计划?为什么数据没有归一化?

标签: mysql performance


【解决方案1】:

鉴于您的限制,我认为除了在 col_3、hour_col、minute_col、second_col、col1、col2 之间放置复合索引之外,这可以提高效率。

 CREATE INDEX covering_index 
        ON mytable (col_3, hour_col, minute_col,second_col, col1, col2);

此索引将有助于避免在主表中进行点查找,因为它会排序并返回您需要的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 2021-08-14
    • 1970-01-01
    • 2016-03-24
    • 2016-03-23
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多