【问题标题】:Is it possible that adding a LIMIT to my query is making it slower?是否有可能在我的查询中添加 LIMIT 会使其变慢?
【发布时间】:2020-08-28 04:23:49
【问题描述】:

如果我执行以下操作,我有一个包含 +2.000.000 行的表格:

SELECT 
    *
  FROM transaction 
  WHERE company = 123
  AND date > CURDATE()
  AND name = 4;

这需要 120 毫秒,但如果我添加一个 LIMIT:

SELECT 
    *
  FROM transaction 
  WHERE company = 123
  AND date > CURDATE()
  AND name = 4 
LIMIT 100;

即使返回一行也需要 350 毫秒。 不应该反过来吗?

有什么想法吗?

【问题讨论】:

  • 显示explain select... 的输出和show create table transaction 的输出。你确定你不是在下订单吗?
  • 顺便说一句,没有 ORDER BY 的 LIMIT 是毫无意义的。并且永远不要使用邪恶SELECT *
  • 看到这个答案stackoverflow.com/a/4974657/10910692 ..你可能会发现一些见解
  • @ysth 没有 ORDER BY,虽然如果我添加 ORDER BY 它与只使用 LIMIT 一样
  • @tcadidot0 谢谢看起来很有趣

标签: mysql database performance


【解决方案1】:

EXPLAIN SELECT ... 和/或EXPLAIN FORMAT=JSON SELECT ... 可能有助于解释差异。还有SHOW CREATE TABLE。有了这些,我可能有更多的细节要传达。

同时,INDEX(company, name, date) 应该有助于提高性能。

ORDER BY date 与该索引一起添加可能不会变慢。任何其他ORDER BY 都可能需要进行排序,从而使查询变慢。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 2019-05-09
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多