MySQL分页Limit的优化过程实战
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,前言在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。SELECT * FROM table LIMIT [offset
千家信息网最后更新 2025年01月22日MySQL分页Limit的优化过程实战
前言
在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
所以通常在查询数据的时候,我们都会用到limit分页,因为这样避免了全表查询,会提高查询效率。但是在一个表的数据量多了之后,分页查询会明细的变慢,下面来一起看看详细的介绍吧
MySQL分页Limit优化
创建测试表card 2000万数据
mysql> select count(*) from card;+----------+| count(*) |+----------+| 20000000 |+----------+1 row in set (0.00 sec)
-首先测试前1000行查询速度
mysql> select * from card limit 1000,10;+---------+--------------------------------------+| card_id | card_number |+---------+--------------------------------------+| 1001 | 13fc90a6-2e3b-11e8-ae62-9c5c8e6e37cf || 1002 | 13fc923e-2e3b-11e8-ae62-9c5c8e6e37cf || 1003 | 13fc93d5-2e3b-11e8-ae62-9c5c8e6e37cf || 1004 | 13fc956a-2e3b-11e8-ae62-9c5c8e6e37cf || 1005 | 13fc9702-2e3b-11e8-ae62-9c5c8e6e37cf || 1006 | 13fc9899-2e3b-11e8-ae62-9c5c8e6e37cf || 1007 | 13fc9a31-2e3b-11e8-ae62-9c5c8e6e37cf || 1008 | 13fc9bc6-2e3b-11e8-ae62-9c5c8e6e37cf || 1009 | 13fc9d5e-2e3b-11e8-ae62-9c5c8e6e37cf || 1010 | 13fc9ef5-2e3b-11e8-ae62-9c5c8e6e37cf |+---------+--------------------------------------+10 rows in set (0.00 sec)
-测试100万之后的查询
mysql> select * from card limit 1000000,10;+---------+--------------------------------------+| card_id | card_number |+---------+--------------------------------------+| 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf || 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf || 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf || 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf || 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf || 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf || 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf || 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf || 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf || 1000010 | 2d871039-2e3b-11e8-ae62-9c5c8e6e37cf |+---------+--------------------------------------+10 rows in set (0.18 sec)
-测试1000万之后的查询
mysql> select * from card limit 10000000,10;+----------+--------------------------------------+| card_id | card_number |+----------+--------------------------------------+| 10000001 | b11ad76c-2e49-11e8-ae62-9c5c8e6e37cf || 10000002 | b11aefd5-2e49-11e8-ae62-9c5c8e6e37cf || 10000003 | b11af868-2e49-11e8-ae62-9c5c8e6e37cf || 10000004 | b11b0031-2e49-11e8-ae62-9c5c8e6e37cf || 10000005 | b11b07ad-2e49-11e8-ae62-9c5c8e6e37cf || 10000006 | b11b0f0f-2e49-11e8-ae62-9c5c8e6e37cf || 10000007 | b11b1669-2e49-11e8-ae62-9c5c8e6e37cf || 10000008 | b11b1db2-2e49-11e8-ae62-9c5c8e6e37cf || 10000009 | b11b24fa-2e49-11e8-ae62-9c5c8e6e37cf || 10000010 | b11b2c37-2e49-11e8-ae62-9c5c8e6e37cf |+----------+--------------------------------------+10 rows in set (1.29 sec)
可以看到越到后面查询效率会越低。因为在查询100万之后的数据的时候,mysql会首先查询100万零10条数据,然后截取后面的十条数据。这些就造成的性能的降低。
那么怎么去避免这个扫描100万条数据呢。我们可以明确的知道,100万之后的主键是大于100万的。所以我们可以将sql改写,让其用到索引,降低扫描的行数
mysql> select * from card where card_id>=1000000 limit 10;+---------+--------------------------------------+| card_id | card_number |+---------+--------------------------------------+| 1000000 | 2d870088-2e3b-11e8-ae62-9c5c8e6e37cf || 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf || 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf || 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf || 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf || 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf || 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf || 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf || 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf || 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf |+---------+--------------------------------------+10 rows in set (0.00 sec)
这样就可以很大的提高查询效率
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
查询
数据
参数
时候
测试
效率
两个
内容
语句
偏移
学习
支持
很大
明细
最大
万条
不用
价值
前言
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大学国家网络安全会议记录
嘟嘟瓜互联网科技怎么样
网络技术未来规划
方舟能加其他人服务器吗
把数据库数据存成数组
服务信誉好的语音聊天软件开发
非计算机专业自学软件开发
2017网络安全大事件
网络技术中心面试
杭州erp软件开发哪家好
有哪些数据库技术
中国的ntp服务器
今天税务服务器有问题
一个数据库只能有一个关系表
郑州驰瀚网络技术有限公司
解决网络安全威胁
宁波网络技术支持企业
2018网络安全教育视频
按照网络技术的延迟
学校网络安全的情况
国家网络安全战略 明确
ie数据库是什么版本
网络安全执法工作培训
把数据库数据存成数组
河南网络安全宣传周专题
360参加网络安全大会
安装工程项目管理软件开发
网络安全之通信安全
关闭服务器端口意味着降低安全吗
网络安全书记