导航:首页 > 源码编译 > mysql分页查询算法

mysql分页查询算法

发布时间:2024-06-07 11:12:47

⑴ MySql中查询语句实现分页功能

pageNow代表当前页面,第一页。

⑵ MySQL镐庢牱浣跨敤limit銮峰彇鍏ㄩ儴鏁版嵁(mysql涓镄刲imit)

MySQL鏁版嵁搴搇imit鍒嗛〉绀轰緥

1.select*frompersonslimitA,B;

瑙i喷锛

A锛屾煡璇㈣捣镣

B锛岄渶瑕佺殑琛屾暟

2.绀轰緥锛

select*frompersonslimit0,4;

瑙i喷锛

璧风偣浣岖疆涓0锛屽紑濮嬫煡璇锛岃繑锲4𨱒℃暟鎹銆

select*frompersonslimit4,4;

瑙i喷锛

璧风偣涓4锛屽紑濮嬫煡璇锛岃繑锲4澶╂暟鎹銆

3.鐗规畩锛

select*frompersonslimit10;

镒忔濇槸锛岃捣镣逛负0锛屽紑濮嬫煡璇锛岃繑锲10𨱒¤板綍銆

涓巗elect*frompersonslimit0,10;鏄绛変环镄勚

4.鎸夎勫垯鎺掑簭镄勫悓镞讹纴杩涜屽垎椤碉细

select*frompersons

orderbylastname

limit0,10;

⑶ MySQL百万级数据量分页查询方法及其优化建议

offset+limit方式的分页查询,当数据表超过100w条记录,性能会很差。
主要原因是offset limit的分页方式是从头开始查询,然后舍弃前offset个记录,所以offset偏移量越大,查询速度越慢。

比如: 读第10000到10019行元素(pk是主键/唯一键).

使用order by id可以在查询时使用主键索引。
但是这种方式在id为uuid的时候就会出现问题。可以使用where in的方式解决:

带条件的查询:
如果在分页查询中添加了where条件例如 type = 'a’这样的条件,sql变成 :

这种情况因为type没有使用索引也会导致查询速度变慢。但是只添加type为索引查询速度还是很慢,是因为查询的数据量太多了。这个时候考虑添加组合索引,组合索引的顺序要where条件字段在前,id在后,如 (type,id),因为组合索引查询时用到了type索引,而type跟id是组合索引的关系,如果只select id ,那么直接就可以按组合索引返回id,而不需要再进行一次查询去返回id

使用uuid作为主键不仅会带来性能上的问题,在查询时也会遇到问题。

因为在使用select id from table limit 10000,10 查询id数据时,默认是对id进行排序,返回的是排序后的id结果,如果我们想按插入顺序查询结果,这样查询出来的结果就与我们的需求不相符。

聚集索引跟非聚集索引:聚集索引类似与新华字典的拼音,根据拼音搜索到的信息都是连续的,可以很快获取到它前后的信息。非聚集索引类似于部首查询,信息存放的位置可能不在一个区域。对经常使用范围查询的字段考虑使用聚集索引。

InnoDB中索引分为聚簇索引(主键索引)和非聚簇索引(非主键索引),聚簇索引的叶子节点中保存的是整行记录,而非聚簇索引的叶子节点中保存的是该行记录的主键的值。

如果您的表上定义有主键,该主键索引是聚集索引。
如果你不定义为您的表的主键时,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚集索引。
如果没有这样的列,InnoDB就自己产生一个这样的ID值,
优先选index key_len小的索引进行count(*),尽量不使用聚簇索引

在没有where条件的情况下,count(*)和count(常量),如果有非聚簇索引,mysql会自动选择非聚簇索引,因为非聚簇索引所占的空间小,如果没有非聚簇索引会使用聚集索引。count(primary key)主键id为聚集索引,使用聚集索引。有where条件的情况下,是否使用索引会根据where条件判断。

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

使用子查询优化大数据量分页查询

这种方式的做法是先定位偏移位置的id,然后再往后查询,适用于id递增的情况。

使用id限定优化大数据量分页查询
使用这种方式需要先假设数据表的id是连续递增的,我们根据查询的页数和查询的记录数可以算出查询的id的范围,可以使用 id between and 来查询:

当然了,也可以使用in的方式来进行查询,这种方式经常用在多表关联的情况下,使用其他表查询的id集合来进行查询:

但是使用这种in查询方式的时候要注意的是,某些MySQL版本并不支持在in子句中使用limit子句。

参考 sql优化之大数据量分页查询(mysql) - yanggb - 博客园 (cnblogs.com)

⑸ mysql 数据量大的表如何做分页查询

直接用limit start, count分页语句, 也是我程序中用的方法:
select * from proct limit start, count
当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下:
select * from proct limit 10, 20 0.016秒
select * from proct limit 100, 20 0.016秒
select * from proct limit 1000, 20 0.047秒
select * from proct limit 10000, 20 0.094秒
我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下(也就是记录的一般左右) select * from proct limit 400000, 20 3.229秒
再看我们取最后一页记录的时间
select * from proct limit 866613, 20 37.44秒
难怪搜索引擎抓取我们页面的时候经常会报超时,像这种分页最大的页码页显然这种时
间是无法忍受的。
从中我们也能总结出两件事情:
1)limit语句的查询时间与起始记录的位置成正比
2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

阅读全文

与mysql分页查询算法相关的资料

热点内容
如何加密qq空间日志 浏览:432
环卫车压缩箱有多重 浏览:746
换手率app怎么没有自媒体了 浏览:407
安卓如何区分展示机和正品机 浏览:371
java运行和编译命令 浏览:543
手机解压30g文件要多久 浏览:708
php读取文件格式 浏览:612
开发程序员的电影 浏览:743
pc端解压文件下载 浏览:708
单片机C语言读寄存器 浏览:164
linux火车源码 浏览:793
小米手机应用加密怎样解除 浏览:523
帮孩子解压的句子 浏览:140
木匠编程 浏览:832
笑话pdf 浏览:441
pdf变形 浏览:852
微信app最下面的菜单栏叫什么 浏览:249
我的世界晚上七点有什么服务器 浏览:176
云服务器不见了怎么办 浏览:967
怎么看电脑ntp服务器地址 浏览:579