【发布时间】:2015-03-20 06:43:57
【问题描述】:
使用简单的查询,例如:
select * from <table> limit 5;
将在几分之一秒内返回结果,这是预期的。我可以将限制增加到 49,结果仍然会在几分之一秒内返回。但是,将限制增加到 50 会导致执行时间无限。
只选择一列允许我将限制增加到几千,但是当我将查询限制在 5000 左右时,同样的问题也适用。
我使用的数据库大约有 100 列和 2200 万行。
为什么我会看到这种行为?
编辑:
使用“order by”:
select * from <table> order by id limit 5; 57 秒
select * from <table> order by id limit 50; 57 秒
select * from <table> order by id limit 100; 未完成
【问题讨论】:
-
最大的问题是多少行?
-
@Mihai 2200万左右
-
表上有索引吗?
-
我猜当你不使用 order by 时,如果限制返回的行的百分比非常低,mysql 优化器不会计算所有行,它会抓取它得到的第一行。通过一个阈值,即使没有 order by,优化器也会决定进行表扫描。该阈值可能是数据量而不是行数。这只是一个猜测,我可能错了
-
@mathielo 是的,ID 的两列已编入索引