【问题标题】:MySQL - Increasing limit by 1 results increases execution time from less than a second to infiniteMySQL - 将限制增加 1 个结果会将执行时间从不到一秒增加到无限
【发布时间】:2015-03-20 06:43:57
【问题描述】:

使用简单的查询,例如:

select * from <table> limit 5;

将在几分之一秒内返回结果,这是预期的。我可以将限制增加到 49,结果仍然会在几分之一秒内返回。但是,将限制增加到 50 会导致执行时间无限。

只选择一列允许我将限制增加到几千,但是当我将查询限制在 5000 左右时,同样的问题也适用。

我使用的数据库大约有 100 列和 2200 万行。

为什么我会看到这种行为?

编辑:

使用“order by”:

select * from <table> order by id limit 5; 57 秒

select * from <table> order by id limit 50; 57 秒

select * from <table> order by id limit 100; 未完成

【问题讨论】:

  • 最大的问题是多少行?
  • @Mihai 2200万左右
  • 表上有索引吗?
  • 我猜当你不使用 order by 时,如果限制返回的行的百分比非常低,mysql 优化器不会计算所有行,它会抓取它得到的第一行。通过一个阈值,即使没有 order by,优化器也会决定进行表扫描。该阈值可能是数据量而不是行数。这只是一个猜测,我可能错了
  • @mathielo 是的,ID 的两列已编入索引

标签: mysql infinite


【解决方案1】:

这可能会有所帮助: https://dev.mysql.com/doc/refman/5.0/en/select.html

尝试使用SQL_BIG_RESULTSQL_BUFFER_RESULT

这也可能是由于内存分配设置不佳所致。 您是否存储 BLOB 或任何其他大型字段?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多