MySQL笔记
内容整理在GitHub,地址https://github.com/Muscleape/TestDemoProjects
MySQL分页查询
limit的用法
- limit子句可以被用于强制select语句返回指定的记录数;
- 接受1个或2个整数常量做参数,第一个是返回记录行的偏移量,第二个是返回记录行的最大数目
-- 检索记录行6~15;
mysql> SELECT * FROM table LIMIT 5,10;
-- 从某个偏移量到记录集的最后,可以指定第二个参数为-1;
mysql> SELECT * FROM table LIMIT 95,-1;
-- 如果只给定一个参数,表示返回的作答记录行数目;
mysql> SELECT * FROM table LIMIT 5;
-- LIMIT n 等价于 LIMIT 0,n;
MySQL分页查询语句的性能分析
- 确保使用索引,下列语句中在ta_id和id两列上建立索引
mysql> SELECT * FROM ta WHERE ta_id = 111 ORDER BY id LIMIT 50,10;
- 使用子查询,随着数据量增加,越往后LIMIT语句的偏移量就会越大,速度会明显变慢;
-- 使用子查询之前,偏移量为10000;
mysql> SELECT * FROM ta WHERE ta_id = 123 ORDER BY id LIMIT 10000, 10;
-- 使用子查询之后;
mysql>
SELECT * FROM ta WHERE id >=
(SELECT id FROM ta WHERE ta_id = 111 ORDER BY id LIMIT 10000,1)
LIMIT 10;
大数据量的MySQL表,LIMIT分页存在严重的性能问题:
优化方式:
- 使用子查询
- 利用类似策略模式处理分页,判断100页以内使用基本的分页方式,100页以上使用子查询的分页方式;
- 使用有索引的列或主键列进行order by操作
- 记录上次返回的主键,下次查询时使用主键过滤
- 为了保证index索引列连续,可以为每个表增加一个自增的字段,并且加上索引
作者:Muscleape
出处:http://www.cnblogs.com/muscleape/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构