MySQL大数据量快速分页实现

以下分享一点我的经验

一般刚开始学SQL语句的时候,会这样写

代码如下:

SELECT * FROM table ORDER BY id LIMIT 1000, 10;

但在数据达到百万级的时候,这样写会慢死

代码如下:

SELECT * FROM table ORDER BY id LIMIT 1000000, 10;

也许耗费几十秒

网上很多优化的方法是这样的

代码如下:

SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10;

是的,速度提升到0.x秒了,看样子还行了

可是,还不是完美的!

以下这句才是完美的!

代码如下:

SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010;

比上面那句,还要再快5至10倍

另外,如果需要查询 id 不是连续的一段,最佳的方法就是先找出 id ,然后用 in 查询

代码如下:

SELECT * FROM table WHERE id IN(10000, 100000, 1000000...);

再分享一点

查询字段一较长字符串的时候,表设计时要为该字段多加一个字段,如,存储网址的字段

查询的时候,不要直接查询字符串,效率低下,应该查询该字串的crc32或md5
---------------------
作者:Jef冒牌绅士
来源:CSDN
原文:https://blog.csdn.net/longjef/article/details/53929394
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/findumars/p/10421340.html

时间: 2024-08-02 11:30:39

MySQL大数据量快速分页实现的相关文章

MySQL大数据量快速分页实现(转载)

在mysql中如果是小数据量分页我们直接使用limit x,y即可,但是如果千万数据使用这样你无法正常使用分页功能了,那么大数据量要如何构造sql查询分页呢? 般刚开始学SQL语句的时候,会这样写 代码如下:  代码如下 复制代码 SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但在数据达到百万级的时候,这样写会慢死 代码如下:  代码如下 复制代码 SELECT * FROM table ORDER BY id LIMIT 1000000, 10

MySQL 大数据量快速插入方法和语句优化

MySQL大数据量快速插入方法和语句优化是本文我们主要要介绍的内容,接下来我们就来一一介绍,希望能够让您有所收获! INSERT语句的速度 插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: 连接:(3) 发送查询给服务器:(2) 分析查询:(2) 插入记录:(1x记录大小) 插入索引:(1x索引) 关闭:(1) 这不考虑打开表的初始开销,每个并发运行的查询打开. 表的大小以logN (B树)的速度减慢索引的插入. 加快插入的一些方法 如果同时从同一个客户端插入很多行,使用含多个VA

【MySql 大数据量快速插入和语句优化】

INSERT语句的速度 插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例:连接:(3)发送查询给服务器:(2)分析查询:(2)插入记录:(1x记录大小)插入索引:(1x索引)关闭:(1)这不考虑打开表的初始开销,每个并发运行的查询打开. 表的大小以logN (B树)的速度减慢索引的插入. 加快插入的一些方法: · 如果同时从同一个客户端插入很多行,使用含多个VALUE的INSERT语句同时插入几行.这比使用单行INSERT语句快(在某些情况下快几倍).如果你正向一个非空表添加数据,可

MySQL大数据量分页查询方法及其优化

方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃. 方法2: 建立主键或唯一索引, 利用索引(假设每页10条) 语句样式: MySQL中,可用如下方法: SELECT * FRO

mysql大数据量表索引与非索引对比

1:不要在大数据量表中轻易改名字(做任何操作都是非常花费时间) 2个多亿数据量的表 改名操作  执行时间花费8分多钟 (如果是加索引等其他操作 那时间花费不可预估) 2:给大数据量的mysql表 添加索引 所花费的时间 如下 在日后生产环境 如果需要给表添加索引等操作 心里要有预估时间的花费范围 3: explain 解释 语句 type:ALL 进行完整的表扫描 .row:213284372  mysql预估需要扫描213284372 条记录来完成这个查询.可想而知 表数据量越大全表扫描越慢.

Mysql大数据量问题与解决

今日格言:了解了为什么,问题就解决了一半. Mysql 单表适合的最大数据量是多少? 我们说 Mysql 单表适合存储的最大数据量,自然不是说能够存储的最大数据量,如果是说能够存储的最大量,那么,如果你使用自增 ID,最大就可以存储 2^32 或 2^64 条记录了,这是按自增 ID 的数据类型 int 或 bigint 来计算的:如果你不使用自增 id,且没有 id 最大值的限制,如使用足够长度的随机字符串,那么能够限制单表最大数据量的就只剩磁盘空间了.显然我们不是在讨论这个问题. 影响 My

提高MYSQL大数据量查询的速度

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用

总结MySQL大数据量下如何进行优化

写在建库前: 在确定数据库业务后.建立数据库表格时,就应对一些常见问题有所考虑,以避免在数据增长一段时间后再做应对,可能造成时间及维护成本增加: 数据的月增量,年增量 数据的快速增长点 是否需要触发器或事件等 查询业务需求 服务器访问量 以上的考虑项,对数据库的类型.表的结构.表间关系的定义及数据库配置都有非常重要的影响. 运行后优化: 优化顺序 第一,优化你的sql和索引: 想实现一个查询,可以写出很多种查询语句,不同的语句,根据你选择的引擎.表中数据的分布情况.索引情况.数据库优化策略.查询

java mysql大数据量批量插入与流式读取分析

总结下这周帮助客户解决报表生成操作的mysql 驱动的使用上的一些问题,与解决方案.由于生成报表逻辑要从数据库读取大量数据并在内存中加工处理后在 生成大量的汇总数据然后写入到数据库.基本流程是 读取->处理->写入. 1 读取操作开始遇到的问题是当sql查询数据量比较大时候基本读不出来.开始以为是server端处理太慢.但是在控制台是可以立即返回数据的.于是在应用 这边抓包,发现也是发送sql后立即有数据返回.但是执行ResultSet的next方法确实阻塞的.查文档翻代码原来mysql驱动默