这可能是一个愚蠢的问题,但我只是对窗帘背后发生的事情感到好奇。
如果我想分页数据库记录,我可以使用LIMIT和OFFSET,或者只是获取所有记录,并用更多代码推断我想要的记录。
我知道第二种选择绝对是愚蠢的,我只是想知道它是否更贵
如果我使用LIMIT和OFFSET将数据库抓住我要求的内容,或者将在内部获取与我的查询匹配的所有记录(甚至数十万),然后在内部使用起始索引(OFFSET)和结束索引( OFFSET + LIMIT)获取所请求的记录子集?
我甚至不知道我是否用正确的词语来形容我所怀疑的,我希望有人可以解释一下。
谢谢!
答案 0 :(得分:7)
是的,由于两个原因,它会更贵。
1)Mysql将在内部优化以仅计算它所需的行,而不是在内部全部检索它们。请注意,如果在查询中有顺序,则此优化要少得多,因为mysql必须匹配并对数据集中的所有行进行排序,而不是在找到限制中的第一个X时停止。
2)当返回所有记录时,它们都需要通过线路从数据库传输到应用程序服务器。这可能需要一些时间,特别是对于中型到大型数据集。
答案 1 :(得分:1)
差异可能很大。有时网络差异很大(几行对数百到数千),但数据库需要查找的行数也可能很大。例如,如果要求10行,数据库可以在找到10行后停止,而不必检查每一行。
尽可能使用LIMIT和OFFSET。