MySQL 的分页查询 SQL 语句(转)
时间:2019-08-23
本文章向大家介绍MySQL 的分页查询 SQL 语句(转),主要包括MySQL 的分页查询 SQL 语句(转)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
转自 https://www.cnblogs.com/wbxk/p/10644766.html
MySQL一般使用 LIMIT 实现分页。基本语句为:
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...
在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。
举例来说,如果实际SQL类似下面语句,那么在 category_id, id两列上建立复合索引比较好:
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10 ;
随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似下面这种:
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10;
可以看出,越往后分页,LIMIT 语句的偏移量(limit接收两个参数时的第一个参数)就会越大,速度也会明显变慢。此时,我们可以通过子查询的方式来提高分页效率:
SELECT * FROM articles WHERE id >=
(SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) AND category_id = 123 ORDER BY id LIMIT 10;
还可以通过 JOIN 方式来实现分页查询:
SELECT * FROM articles AS t1 JOIN (SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) AS t2 WHERE t1.id >= t2.id AND t1.category_id = 123 ORDER BY t1.id LIMIT 10;
为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。
实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。
下面是实际中三种方式的使用:
SELECT * FROM CommodityInfo WHERE commodityid='ZMCOMD342161018143038124' ORDER BY id LIMIT 0,2; SELECT * FROM CommodityInfo WHERE id >= (SELECT id FROM CommodityInfo WHERE commodityid='ZMCOMD342161018143038124' ORDER BY id LIMIT 0, 1) AND commodityid='ZMCOMD342161018143038124' ORDER BY id LIMIT 2; SELECT * FROM CommodityInfo AS t1 JOIN (SELECT id FROM CommodityInfo WHERE commodityid = 'ZMCOMD342161018143038124' ORDER BY id LIMIT 0, 1) AS t2 WHERE t1.id >= t2.id AND t1.commodityid='ZMCOMD342161018143038124' ORDER BY t1.id LIMIT 2;
原文地址:https://www.cnblogs.com/ffaiss/p/11398477.html
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 【colab pytorch】设置随机种子
- (三)django--带Template的网站
- spring之IOC(控制反转)和DI(依赖注入)
- 【colab pytorch】指定使用的显卡
- Python自学成才之路 迭代器的使用
- 回溯法--全排列
- 【colab pytorch】张量操作
- 『开发技巧』python :与-> 操作来给函数参数增加元信息
- 【python-leetcode78-子集】子集
- 【colab pytorch】模型定义
- 初级爬虫--爬取拉勾网职位信息
- requests库
- hadoop之完全分布式集群配置(centos7)
- XPath
- 62. Vue 饿了么Mint UI组件的基本使用