【问题标题】:Limit performance for a known number of records限制已知数量记录的性能
【发布时间】:2016-10-21 15:59:59
【问题描述】:

假设我有一个简单的 select * from table;查询我事先知道有多少条目存在的地方。假设是 100。

这三个调用之间是否存在性能差异?
1) 从表中选择 *;
2) select * from table limit 100;
3) select * from table limit 1000;

每个调用都将返回正好 100 行。不同的限制值或没有限制值会影响调用的速度吗?

【问题讨论】:

  • 我投票结束这个问题,因为它的性能很容易测试。
  • 您必须尝试每个查询并测量结果才能确定。但我猜如果限制等于或超过实际记录数,则性能差异不会很大。
  • 我认为设置限制很重要。检查this
  • 我怀疑会有很多差异。如果添加 LIMIT 语句会稍微慢一些,因为它必须确认返回的行数仍然低于该限制。但我强烈怀疑它甚至会接近引人注目。
  • 您不会看到此查询之间存在有价值的差异。这不是影响您的表现的limit,而是offset。我同意@JustinNiessner 的观点,我认为你写这个问题的时间比你自己写一个简单的 PHP 脚本来测试它的时间要多。

标签: mysql sql


【解决方案1】:

是和不是。

没有ORDER BYLIMIT 允许引擎传递任意行。但是对于较低的LIMIT,它会更快——时间基本上与传递的行数成正比。

ORDER BY ... LIMIT ... 可能必须在传递某些行子集之前对整个表进行排序。因此,它可能会比没有ORDER BY 时要慢,也许要慢很多。

使用ORDER BY,速度可能取决于您拥有的索引以及WHERE 子句中的内容。

我的观点是——在一个现实查询中发生了太多事情,以至于对你的问题的单行答案几乎不会提供任何有用的信息。

【讨论】:

    【解决方案2】:

    这完全取决于您使用的数据库(即使是不同的 mysql 版本也可能会有所不同)。

    在指定限制和不指定限制之间可能会有性能差异(尽管非常小)。因为数据库可能会制定不同的执行计划。

    但这只是最初的,因为大多数数据库都会缓存查询。 (她确保在您测试此性能时禁用此功能)

    【讨论】:

    • "指定限制和不指定限制之间可能会有性能差异。"。在什么情况下? OP 已明确提到行数在限制范围内。
    • 如果只是为了向数据库服务发送更多的 10 个字符,这意味着更大的请求负载。我同意这是在纳米级别,你不应该担心这个,但问题不是很具体。
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多