mysql limit分页查询优化写法
来源:互联网 发布:虚拟gps定位软件 编辑:程序博客网 时间:2024/05/17 06:55
在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用orderby排 序。但是在表数据量比较大的时候,例如查询语句片段limit 10000, 20,数据库会读取10020条数据,然后把前10000条丢弃,把最后的20条返回给你,这种消耗是可以避免的,也是没必要的。下边介绍几种优化方法:
优化方法1(让分页操作在索引中进行):
一般表中经常作为条件查询的列都会建立索引,例如如下查询
Sql代码
SELECT msg_id, msg_content FROM message ORDER BY gmt_create desc LIMIT 100, 20;
可以写成如下方式
Sql代码
SELECT msg_id, msg_content FROM message
INNER JOIN (
SELECT msg_id FROM message
ORDER BY gmt_create LIMIT 100, 20
) AS page USING(msg_id);
这样当前查询页的内容就只会在索引中进行,当得到当前页的msg_id再统一通过一个INNER JOIN得到最终要得到的数据详情,避免了对大量数据详情进行操作的消耗。当然JOIN操作也可以通过子查询实现,不过书中介绍5.6之前版本的 mysql相比子查询还是优先使用JOIN。
优化方法2(显式指定要查询的索引列范围)
例如方法一中的gmt_create是建立索引的列,而且你也知道要查询的时间范围,这样你就可以通过如下查询语句:
Sql代码
SELECT msg_id, msg_content FROM message
WHERE gmt_create BETWEEN #startTime# AND #endTime#
ORDER BY gmt_create desc
这样数据库通过一个范围查询就可以得到想要的数据。
优化方法3(OFFSET作为查询条件显式指定)
例子还是如上,我们可以在查询参数中显式指定一个查询时间,叫做lastVisitTime吧。我们查询第一页可以用如下语句:
Sql代码
SELECT msg_id, msg_content FROM message
ORDER BY gmt_create desc
LIMIT 20
我们把读出来的数据的最后一条数据的gmt_create字段记录在lastVisitTime字段中,那么后边页的查询就可以用如下语句实现:
Sql代码
SELECT msg_id, msg_content FROM message
WHERE gmt_create < #lastVisitTime#
ORDER BY gmt_create desc
LIMIT 20;
这种查询方式,无论你查询多少页,分页都不会是影响效率的因素。
- mysql limit分页查询优化写法
- mysql limit分页查询优化写法
- mysql limit分页查询优化写法
- MySQL limit分页查询优化写法
- mysql limit 分页查询优化
- mysql分页limit优化
- MySQL 优化Limit分页
- mysql分页limit 优化
- mysql 分页limit 优化
- mysql优化limit分页
- mysql limit分页优化
- Mysql limit分页优化
- MySQL Limit 分页优化
- MySQL limit查询优化
- mysql limit查询优化
- mysql limit查询优化
- mysql limit查询优化
- mysql limit查询优化
- MySQL性能优化的最佳20+条经验
- eclipse中OpenCV安装指南
- 关于myeclipse中启动项目(服务器为welogic10)报valid license.bea错误的问题解决方案
- MySQL方面不错的文章
- MySQL是否区分大小写
- mysql limit分页查询优化写法
- 计算机系统知识
- 安全科普:流量劫持能有多大危害?
- 浅谈Oracle数据库中的缓存-Cache (IO)
- Tomcat的context.xml说明、Context标签讲解
- 排风扇的日常使用
- DBCP连接池原理分析
- Golden Gate 与 Oracle DataGuard的区别
- Web应用程序中线程的启动和关闭问题