如何使用 SQL_CALC_FOUND_ROWS 高效获取分页 MySQL 查询中的行数?

Barbara Streisand
发布: 2024-11-01 03:58:28
原创
343 人浏览过

How to Efficiently Get Row Count in Paginated MySQL Queries with SQL_CALC_FOUND_ROWS?

尽管有 LIMIT,仍使用 SQL_CALC_FOUND_ROWS 获取行计数

使用分页(“LIMIT”子句)执行复杂的 MySQL 查询时,获取总行数可能具有挑战性。运行查询两次,其中一次没有总计数的 LIMIT 子句,效率可能会很低。

幸运的是,MySQL 引入了 SQL_CALC_FOUND_ROWS 选项,它允许您在仍然使用 LIMIT 子句的同时计算总行数。其工作原理如下:

  1. 将 SQL_CALC_FOUND_ROWS 添加到您的主查询:
    在 SELECT 子句之后,将 SQL_CALC_FOUND_ROWS 添加到您的主查询。
  2. 执行第二个查询以获取行数:
    使用 FOUND_ROWS() 函数运行第二个查询以检索总行数。

示例查询:

<code class="sql">-- Main query with SQL_CALC_FOUND_ROWS
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

-- Second query to get row count
SELECT FOUND_ROWS();</code>
登录后复制

限制和替代方案:

虽然 SQL_CALC_FOUND_ROWS 提供了一个方便的解决方案,但请注意,它的用法在 MySQL 8.0.17 中已弃用。在大多数情况下,运行查询两次仍然更快。

作为替代方案,MySQL 8.0 引入了以下用于获取行数的优化选项:

  • ROW_COUNT()功能: 返回上一个查询返回的行数。
  • COUNT() 功能: 使用 COUNT(*) 作为子查询来计算行数。

通过利用这些技术,开发人员可以有效地检索分页 MySQL 查询中的总行数,而不会影响速度或性能。

以上是如何使用 SQL_CALC_FOUND_ROWS 高效获取分页 MySQL 查询中的行数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!