在MySQL中使用LIMIT和OFFSET比返回完整的记录集更便宜吗?

时间:2011-07-02 14:33:13

标签: mysql sql limit offset

这可能是一个愚蠢的问题,但我只是对窗帘背后发生的事情感到好奇。

如果我想分页数据库记录,我可以使用LIMIT和OFFSET,或者只是获取所有记录,并用更多代码推断我想要的记录。

我知道第二种选择绝对是愚蠢的,我只是想知道它是否更贵

如果我使用LIMIT和OFFSET将数据库抓住我要求的内容,或者将在内部获取与我的查询匹配的所有记录(甚至数十万),然后在内部使用起始索引(OFFSET)和结束索引( OFFSET + LIMIT)获取所请求的记录子集?

我甚至不知道我是否用正确的词语来形容我所怀疑的,我希望有人可以解释一下。

谢谢!

2 个答案:

答案 0 :(得分:7)

是的,由于两个原因,它会更贵。

1)Mysql将在内部优化以仅计算它所需的行,而不是在内部全部检索它们。请注意,如果在查询中有顺序,则此优化要少得多,因为mysql必须匹配并对数据集中的所有行进行排序,而不是在找到限制中的第一个X时停止。

2)当返回所有记录时,它们都需要通过线路从数据库传输到应用程序服务器。这可能需要一些时间,特别是对于中型到大型数据集。

答案 1 :(得分:1)

差异可能很大。有时网络差异很大(几行对数百到数千),但数据库需要查找的行数也可能很大。例如,如果要求10行,数据库可以在找到10行后停止,而不必检查每一行。

尽可能使用LIMIT和OFFSET。