关于“LIMIT”如何工作的一点说明

sha*_*wty 4 mysql performance testing

不是 DBA 家族的纯血统成员,但更像是一个开发团队,我发现自己试图找出一些运行缓慢的查询。

然而,我的问题的主题不是“为什么我的查询很慢”,而是想知道 MySql 中的“LIMIT”命令是如何工作的。

目前,我仍在尝试对服务器性能本身进行故障排除,因此作为一种给它一些 SQL 来咀嚼的方法(只是为了让它做一些工作),我正在使用以下内容:

SELECT * FROM <table> LIMIT 10
Run Code Online (Sandbox Code Playgroud)

我正在使用的表是一个实时表,其中有超过 50Mil 的行,并且由于我目前只进行测试,我的期望是这将返回表顶部的前 10 条记录,并且很容易在 10 分钟内完成。

然而...

我看到这个 SQL 在 30 分钟或更长时间后仍在运行,并且似乎没有做任何事情。

我想特别澄清的是:

MySql 是否尝试从数据库中获取整个表然后才返回前 10 行

或者

MySql 是否在接收行时获取行并在计算收到 10 行后停止

干杯美女

小智 6

mysql 应该像您的示例一样优化查询,而不是为了检索 10 条记录而进行全表扫描。在执行全表扫描order by之前添加一个没有索引的limit 10

你确定你的“桌子”真的是一张桌子而不是一个视图?您可能正在从慢速视图中进行选择。


Ale*_*ros 3

如果查询没有任何特定的顺序,它将返回收到的前 10 行。但如果有“ WHERE ...”或“ ORDER BY ...”子句,则必须首先获取完整结果集,然后获取前 10 行。

SELECT...如果没有“ WHERE ...”或“ ”子句的简单“ ORDER BY ...”需要那么长时间,我可能会建议分析表http://dev.mysql.com/doc/refman/5.0/en/analyze-table.html。您还应该检查该数据库表是否有主键。如果没有,设置一个可能会加快查询速度。