您的位置:首页 > 数据库 > MySQL

mysql limit分页查询优化

2014-03-29 15:53 639 查看
在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得到最终要得到的数据详情,避免了对大量数据详情进行操作的消耗。

优化2.

例如方法一中的gmt_create是建立索引的列,而且你也知道要查询的时间范围,这样你就可以通过如下查询语句:Sql代码 SELECT msg_id, msg_content FROM message WHERE gmt_create BETWEEN #startTime# AND #endTime# ORDER BY gmt_create desc 这样数据库通过一个范围查询就可以得到想要的数据

优化3.
例子还是如上,我们可以在查询参数中显式指定一个查询时间,叫做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 数据库 message