博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql大数据量分页查询优化
阅读量:7246 次
发布时间:2019-06-29

本文共 1502 字,大约阅读时间需要 5 分钟。

参考文章:https://www.dexcoder.com/selfly/article/293

 

Mysql的分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了。

传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n,m

MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,所以n越大,偏移量越大,性能就越差。

推荐分页查询方法:

1、尽量给出查询的大致范围

    

SELECT c1,c2,cn... FROM table WHERE id>=20000 LIMIT 10;

 

2、子查询法

 

SELECT c1,c2,cn... FROM table WHERE id>=(    SELECT id FROM table LIMIT 20000,1)LIMIT 10;

 

3、高性能MySQL一书中提到的只读索引方法

  一般表中经常作为条件查询的列都会建立索引,例如如下查询

    
Sql代码  优化前
SELECT id, content  FROM tb_chat ORDER BY create_time DESC LIMIT 24000, 20;

 

Sql代码   优化后
SELECT id, content FROM tb_chat   INNER JOIN (      SELECT id FROM tb_chat      ORDER BY create_time LIMIT 24000, 20      ) AS page USING(id);

 这样当前查询页的内容就只会在索引中进行,当得到当前页的id再统一通过一个INNER JOIN得到最终要得到的数据详情,避免了对大量数据详情进行操作的消耗。当然JOIN操作也可以通过子查询实现,不过书中介绍5.6之前版本的mysql相比子查询还是优先使用JOIN。

对上一个sql继续优化改进,当有查询条件分页时,一定要确保有数据是在limit后面的条件里,正常有输入条件检索查询应该是limit 0, 10   我写的是limit 15000,20只是为了测试,因为符合该条件的数据只有1万5千多个,不然超出这个数就查不到数据了,切记

SELECT id, content,c.z_type FROM tb_chat cINNER JOIN (      SELECT id,z_type FROM tb_chat WHERE z_type='1'    ORDER BY create_time LIMIT 15000, 20  ) AS page USING(id);

等同于:

SELECT c.id, c.content,c.z_type FROM tb_chat cINNER JOIN (      SELECT id,z_type FROM tb_chat WHERE z_type='1'    ORDER BY create_time LIMIT 15000, 20  ) AS p ON c.id=p.id;

 

个人觉得此方法更为通用,而且经过我的测试,发现表中总数据只有3万条数据时两个sql语句的执行时间竟然相差4倍,优化前的sql执行需要120ms,而优化后的sql需要30ms。

 

4、第一步用用程序读取出ID,然后再用IN方法读取所需记录

程序读ID:

SELECT id FROM table LIMIT 20000, 10;SELECT c1, c2, cn .. . FROM table WHERE id IN (id1, id2, idn.. .)

 

 
 

转载地址:http://xjnbm.baihongyu.com/

你可能感兴趣的文章
增加点访问量
查看>>
MongoDB笔记十七——Mongodb导入
查看>>
sdfgsdf
查看>>
别人的tomcat配置
查看>>
linux基础命令练习题
查看>>
《Memcached应用实战》
查看>>
我的友情链接
查看>>
Linux 基础学习 文件查找命令 find 部分用法
查看>>
怎样成为一个高级的研发工程师
查看>>
Telnet部署与启动 windows&&linux
查看>>
落力在岁月青葱
查看>>
2015年春节往事小记
查看>>
oracle 删除表空间后服务器磁盘空间未释放
查看>>
windows程序员C/C++转向linux程序员时,如何编写、调试linux程序
查看>>
我的友情链接
查看>>
非等宽图片列表的布局
查看>>
【JAVA技术】webservice接口
查看>>
app打包总结 以及 提交app审核过程
查看>>
关于root(其他)用户拒绝登陆mysql的处理方法
查看>>
Linux基本常用命令总结-初级
查看>>