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
。
你确定你的“桌子”真的是一张桌子而不是一个视图?您可能正在从慢速视图中进行选择。
如果查询没有任何特定的顺序,它将返回收到的前 10 行。但如果有“ WHERE ...
”或“ ORDER BY ...
”子句,则必须首先获取完整结果集,然后获取前 10 行。
SELECT...
如果没有“ WHERE ...
”或“ ”子句的简单“ ORDER BY ...
”需要那么长时间,我可能会建议分析表http://dev.mysql.com/doc/refman/5.0/en/analyze-table.html。您还应该检查该数据库表是否有主键。如果没有,设置一个可能会加快查询速度。