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

发布于 2024-11-18 08:00:19 字数 327 浏览 2 评论 0原文

这可能是一个愚蠢的问题,但我只是好奇幕后发生的事情。

如果我想对数据库记录进行分页,我可以使用 LIMIT 和 OFFSET,或者简单地获取所有记录并使用更多代码推断出我想要的记录。

我知道第二个选项绝对是愚蠢的,我只是想知道它是否更昂贵

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

我什至不知道我是否用了正确的词语来描述我的疑问,我希望有人能解答我的疑问。

谢谢!

It might be a silly question but I am just curious about what goes on behind the curtains.

If I want to paginate database records I can either use LIMIT and OFFSET or simply get all the records and extrapolate the ones I want with more code.

I know the second option is absolutely silly, I just want to know if it is more expensive

If I use LIMIT and OFFSET will the database grab just what I ask for, or will internally get all the records matching my query (even hundreds of thousands) and then use internally a starting index (OFFSET) and an ending index (OFFSET + LIMIT) to get the requested subset of records?

I don't even know if I used the right words to describe the doubt I have, I hope someone can shed some light.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

老娘不死你永远是小三 2024-11-25 08:00:19

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

1)Mysql将在内部进行优化,只计算它需要的行,而不是在内部检索所有行。请注意,如果查询中有 order by,则这种优化会少很多,因为 mysql 必须对数据集中的所有行进行匹配和排序,而不是在找到限制中的第一个 X 时停止。

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

Yes, it would be more expensive, for two reasons.

1) Mysql will optimize internally to only calculate the rows that it needs, rather than retrieving them all internally. Note that this optimization is a lot less if you have an order by in your query, because then mysql has to match and sort all of the rows in the dataset, rather than stopping when it finds the first X in your limit.

2) When all the records are returned, they all need to be transmitted over the wire from the database to your application server. That can take time, especially for medium to large data sets.

对你的占有欲 2024-11-25 08:00:19

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

只要有可能,请使用 LIMIT 和 OFFSET。

The difference can be enormous. Not only is the network difference big sometimes (a few rows vs hundreds to thousands), but the number of rows the database needs to find can be large also. For example, if you ask for 10 rows, the database can stop after finding 10 rows, rather than having to check every row.

Whenever possible, use LIMIT and OFFSET.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文