我正在使用InnoDB。我需要查询以从表中获取10条记录是任何顺序。
没有ORDER BY使用LIMIT是否安全?它会更快吗?
答案 0 :(得分:2)
如果您没有使用ORDER BY,那么您不会对记录进行排序,因此它肯定会使您的数据检索更快。因此,如果您只使用LIMIT,那么与通过ORDER BY检索的数据相比,它会更快。但请注意,在这种情况下,数据不会是任何顺序。
就安全性而言,我不确定您在考虑哪种安全性,因为在仅使用LIMIT且不使用ORDER BY子句的查询中没有潜在的危害。
答案 1 :(得分:2)
这取决于您认为安全 - 如果您想要一致的结果(意思是,只要表的内容不会改变,每次都得到相同的结果)或者您想要特定的结果(biggest,最新,最老,等等) - 比这需要订单。如果安全的话你认为查询不会粉碎,你不关心你得到哪个X结果 - 是的,使用限制很好(这实际上是由许多sql工具自动完成的,比如mysql workbench,以加快速度)。 / p>
就速度而言,由于两个原因,它会因为没有秩序而浪费:
limit 10
的查询在大型表上运行速度比limit 100000
快。当您使用订单时,服务器必须完成所有结果,因此无法在中间停止。所以是的,使用没有订单的限制会使它更快
答案 2 :(得分:1)
是的,你可以,是的,它会更快(假设订单对你无关紧要)。 order by
需要排序。这意味着数据库必须做更多工作才能获得结果。最常见的是limit
order by
与Nearable
一起使用,因为想要对上的一些排序约束进行处理你得到的10条记录(比如说最近,某种类型的最高等级等)< / p>
答案 3 :(得分:0)
到目前为止,3个答案都很好。但他们并不完全正确。
与其他答案相反,有时忽略ORDER BY
将不使其更快。无论如何,优化器可能会以该顺序生成行。例子:
GROUP BY
通常会对结果进行排序。因此,如果ORDER BY
与GROUP 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>(
...
)
)