MYSQL分页查询偏移量过大的优化方案

摘要:
第二种解决办法:在业务允许的情况下限制页数,可以看到百度和google都是这么做的;第三种解决办法:如果id是连续自增的,可以用select*fromsymptomwhereid˃1250000limit15

前提:

出现这种问题的原因是因为mysql在进行分页的时候,并不知直接插rows的数据,而是把offset和rows的数据全部查出来,然后再将offset的数据扔掉,返回rows的数据;

第一种解决办法:

symptom_id是主键,表里面221W数据

优化前####### 42s

select * from symptom ORDER BY create_date desc limit 2210000, 15

内连接优化后####### 7s

SELECT t1.* FROM symptom t1

INNER JOIN ( SELECT symptom_id FROM symptom ORDER BY create_date DESC LIMIT 2210000, 15 ) t2

ON t1.symptom_id = t2.symptom_id

7秒钟的时间大多花费在排序字段上,在create_date上建立索引后总耗时 0.5s !!!!!!!!!!!!!

第二种解决办法:

在业务允许的情况下限制页数,可以看到百度和google都是这么做的;

第三种解决办法:

如果id是连续自增的,可以用

select * from symptom where id > 1250000 limit 15

免责声明:文章转载自《MYSQL分页查询偏移量过大的优化方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇反编译APK文件的三种方法(转)CentOS安装mysql源码包下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【SQL server初级】数据库性能优化二:数据库表优化

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第二部分   数据库性能优化二:数据库表优化   优化①:设计规范化表,消除数据冗余   数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库设计方式。满足范式要求的表,称为规范化表,范式产生于20世纪70年代初,一般表设计满足前三范式就可以,在这里简单...

Centos7搭建日志服务器rsyslog+loganalyzer

、准备环境 更新时间 yum install ntp ntpdate systemctl start ntpd systemctl enable ntpd ntpdate ntp1.aliyun.com--------------------- 2.1 关闭防火墙: #systemctl stop firewalld2.2 将SELINUX设置为disab...

MySql免安装版安装配置,附MySQL服务无法启动解决方案

文首提要: 我下载的MySQL版本是:mysql-5.7.17-winx64.zip Archive版;系统:Windows7 64位。 一、解压文件 下载好MySQL后,解压到D盘下,也可以根据个人喜好解压在其他盘符的路径下,解压后的路径是:D:mysql-5.7.17-winx64。解压好后不要太兴奋,需要配置默认文件呢! 二、配置默认文件 解压后的文...

MySQL分区表管理

RANGE,LIST分区管理 1:为未分区表创建分区 ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2; 2:删除某个分区的数据 ALTER TABLE tr DROP PARTITION p2; 3:为分区表添加一个分区 ALTER TABLE members ADD PARTITION (PAR...

从Oracle转到Mysql前需了解的50件事

我本人比较关心的几点:   1. 对子查询的优化表现不佳.   2. 对复杂查询的处理较弱   4. 性能优化工具与度量信息不足   12. 支持 SMP (对称多处理器),但是如果每个处理器超过 4 或 8 个核(core)时,Mysql 的扩展性表现较差.   15. 没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的...

mysql trigger 权限的说明

普通用户在创建trigger时会遇到的问题: 1、如果开启了二进制日志,但是用户没有supper 权限;那么他在创建trigger 时会提示设置log_bin_trust_function_creators=1 trigger 的一些限制: 1、同一个表的同一个时间点只能创建一个trigger;也就是说对于表t在它之上的before update 触发器只...