mysql 大数据量的分页优化

使用limit进行分页,翻到10000多页后效率低

原因

limit offset 会逐行查找,是先查询再跳过

优化思路

(1)从业务逻辑

不允许翻过100页,例如百度一般可以翻到70页左右

(2)技术上

select * from table limit 5000000,10 时就很慢了,大概需要4秒多

优化方法(1)

select * from table where id>5000000 limit 10;

这样就非常快,0.02s左右,因为使用了id索引

但这样用有前提,id是连续的,中间的数据不能删,否则id为5000000的并不是第5000000个记录

优化方法(2)

如果必须用limit offset查询,就用延迟关联

select id from table limit 5000000,10

这样只查询id列,实现了索引覆盖,就会很快

select t.* from table t inner join (select id from table limit 5000000,10) as tmp on t.id=tmp.id;

通过内连接再获取分页后每条记录的详细信息

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linux运维学习之路

Linux中MySQL配置文件my.cnf参数优化

MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的。MySQL的参数优化也不例外,对于不同的需求,还有硬件...

5948
来自专栏深度学习之tensorflow实战篇

MYSQL数据导出与导入,secure_file_priv参数设置

MySQL 报错 [Code: 1290, SQL State: HY000] The MySQL server is running with the –...

5685
来自专栏王磊的博客

golang操作文件

1、读取文件信息: /* 读取文件信息 */ func readFile(path string) string { fi, err := os.Open(p...

2745
来自专栏知识分享

2-LPC1778之GPIO

其实这篇文章主要是介绍自己为其写的GPIO库,自己借鉴了原子写的STM32,野火写的K60,还有LPC官方库,然后按照自己平时用的,然后写了一个..其实写库的主...

3285
来自专栏运维技术迷

MySQL数据库(七):数据导出与导入

一、数据导入 1.什么是导入:把系统文件的内容保存到数据库服务器的表里 2.导入数据时的注意事项? -表中字段的个数要和文件列中的个数相等 ...

3935
来自专栏游戏杂谈

libcurl上传文件

libcurl参数很多,一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>

4631
来自专栏知无涯

使用PHP调用SQL SERVER 2008及以上版本的方法

3788
来自专栏吴伟祥

分布式锁的几种实现方式~ 转

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一...

3041
来自专栏Python自动化测试

Django模型学习笔记(五)

在前面的四节中介绍了django环境的搭建,项目创建,执行原理以及url的路由系统,本小节学习Django的模型部分,众所周知,django是MTV...

1123
来自专栏维C果糖

史上最简单的 MySQL 教程(三十七)「数据备份与还原(下)」

数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、SQL备份和增量备份。

3557

扫码关注云+社区

领取腾讯云代金券