影响LIMIT子句使用的一个mysql配置项

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: select FOUND_ROWS()总是返回上一次select所返回的行数。它的结果受到上一次select中是否使用SQL_CALC_FOUND_ROWS的影响测试如下:1.运行语句:select SQL_CALC_FOUND_ROWS * from penalties where amount>=20 limit 2然后运行:select FOUND_ROWS();返回的行数是:42.
select FOUND_ROWS()总是返回上一次select所返回的行数。它的结果受到上一次select中是否使用SQL_CALC_FOUND_ROWS的

影响
测试如下:

1.运行语句:select SQL_CALC_FOUND_ROWS * from penalties where amount>=20 limit 2

然后运行:select FOUND_ROWS();
返回的行数是:4

2.不使用SQL_CALC_FOUND_ROWS
select * from penalties where amount>=20 limit 2
然后运行:select FOUND_ROWS();
返回的行数是:2

结论:使用SQL_CALC_FOUND_ROWS后(在幕后计算找到的总行数,保存起来后面使用),FOUND_ROWS()是抛掉了LIMIT之后的结果数。
不使用SQL_CALC_FOUND_ROWS,FOUND_ROWS()是select语句返回的最终结果数。


select FOUND_ROWS()的最大用处是在翻页中,预先将总数保存在FOUND_ROWS()中。每次点击下一页的时候,显示总记录数,

就是读取FOUND_ROWS()函数的值。这样省去查询数据库,扫描表所有记录。

所使用到的特性是:通过设置SQL_CALC_FOUND_ROWS,FOUND_ROWS()的结果不受limit的影响,返回的将会是符合条件除limit

外的总行数。

网上看了一下,列出的问题如下:

在最上面的更新里有mysql的bug连接,4.1, 5.0, 5.1版本都有这个问题。mysql对FOUND_ROWS()函数优化不够,比如下面两个

SQL:
select sql_calc_found_rows last_name from contacts group by c_id order by last_name
limit 1;
有sql_calc_found_rows(19.38 秒)

select last_name from contacts group by c_id order by last_name limit 1;
没有 sql_calc_found_rows(3.13 秒)

差别高达8秒,可见mysql这方面的问题还是很大的,在这个bug没有修复之前,这些功能不值得使用。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL LIKE 子句
总结 vue3 的一些知识点:MySQL LIKE 子句
|
3月前
|
关系型数据库 MySQL 索引
【mysql】 limit 关键字
【mysql】 limit 关键字
72 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL LIKE 子句
MySQL LIKE 子句
|
4月前
|
SQL 关系型数据库 MySQL
MySQL WHERE 子句
MySQL WHERE 子句
|
7月前
|
关系型数据库 MySQL
MySql limit 数据分页
MySql limit 数据分页
36 0
|
6月前
|
算法 关系型数据库 MySQL
【MySQL系列】-ORDER BY……HAVING详解及limit
文章目录 创建学校联考成绩表 一、obder by…… having…… 1.格式: 2.作用: 3.使用: 4.使用细节: 二、limit 1. limit的格式: 2. limit的作用: 3.使用:
|
2月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL LIKE 子句
总结 vue3 的一些知识点:MySQL LIKE 子句
|
3月前
|
关系型数据库 MySQL Unix
MySQL LIKE 子句
【1月更文挑战第5天】MySQL 使用讲解 第05期
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第九篇】一文带你精通MySQL子句
【MySQL进阶之路丨第九篇】一文带你精通MySQL子句
22 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL WHERE 子句
【1月更文挑战第2天】MySQL 使用讲解 第02期