没有ORDER BY使用LIMIT是否安全

时间:2016-01-15 13:41:43

标签: mysql innodb

我正在使用InnoDB。我需要查询以从表中获取10条记录是任何顺序。

没有ORDER BY使用LIMIT是否安全?它会更快吗?

5 个答案:

答案 0 :(得分:2)

如果您没有使用ORDER BY,那么您不会对记录进行排序,因此它肯定会使您的数据检索更快。因此,如果您只使用LIMIT,那么与通过ORDER BY检索的数据相比,它会更快。但请注意,在这种情况下,数据不会是任何顺序。

就安全性而言,我不确定您在考虑哪种安全性,因为在仅使用LIMIT且不使用ORDER BY子句的查询中没有潜在的危害。

您还可以查看文章:ORDER BY … LIMIT Performance Optimization

答案 1 :(得分:2)

这取决于您认为安全 - 如果您想要一致的结果(意思是,只要表的内容不会改变,每次都得到相同的结果)或者您想要特定的结果(biggest,最新,最老,等等) - 比这需要订单。如果安全的话你认为查询不会粉碎,你不关心你得到哪个X结果 - 是的,使用限制很好(这实际上是由许多sql工具自动完成的,比如mysql workbench,以加快速度)。 / p>

就速度而言,由于两个原因,它会因为没有秩序而浪费:

  1. 订购需要时间。
  2. 使用限制允许服务器在找到第一个X结果时停止。您可以看到limit 10的查询在大型表上运行速度比limit 100000快。当您使用订单时,服务器必须完成所有结果,因此无法在中间停止。
  3. 所以是的,使用没有订单的限制会使它更快

答案 2 :(得分:1)

是的,你可以,是的,它会更快(假设订单对你无关紧要)。 order by需要排序。这意味着数据库必须做更多工作才能获得结果。最常见的是limit order byNearable一起使用,因为想要对上的一些排序约束进行处理你得到的10条记录(比如说最近,某种类型的最高等级等)< / p>

答案 3 :(得分:0)

到目前为止,3个答案都很好。但他们并不完全正确。

与其他答案相反,有时忽略ORDER BY使其更快。无论如何,优化器可能会以该顺序生成行。例子:

  • GROUP BY通常会对结果进行排序。因此,如果ORDER BYGROUP BY匹配,则不会有额外的努力。
  • ORDER BY the_primary_key可能与提取顺序相匹配。对于没有WHERE子句的InnoDB,几乎可以保证这种情况。

“安全”无法计算。

答案 4 :(得分:0)

这不安全。

如果不进行排序,则同一查询的连续执行结果可能不一致。

Refer to mysql limit collapse, which result in data interaction

例如:(course_id是主键)。

获取首页10行;

SearchBar

获取第二页7行

SizedBox(
   height: 100.0
   child: SearchBar<Post>(
   ...
  )
)