拓和科技有限公司网站,vs制作网页教程,给公司做个网站多少钱,百度网站怎么做视频播放器在MySQL中#xff0c;分页查询一般都是使用limit子句实现#xff0c;limit子句声明如下#xff1a;LIMIT子句可以被用于指定 SELECT 语句返回的记录数。
作者#xff1a;青芽草 分页查询方法#xff1a;
在MySQL中#xff0c;分页查询一般都是使用limit子句实现#x…在MySQL中分页查询一般都是使用limit子句实现limit子句声明如下LIMIT子句可以被用于指定 SELECT 语句返回的记录数。
作者青芽草 分页查询方法
在MySQL中分页查询一般都是使用limit子句实现limit子句声明如下
LIMIT子句可以被用于指定 SELECT 语句返回的记录数。需注意以下几点
1、第一个参数指定第一个返回记录行的偏移量
2、第二个参数指定返回记录行的最大数目
3、如果只给定一个参数它表示返回最大的记录行数目
4、第二个参数为 -1 表示检索从某一个偏移量到记录集的结束所有的记录行
5、初始记录行的偏移量是0(而不是 1)
下面是一个应用实例
该条语句将会从表 orders_history 中查询第1000条数据之后的10条数据也就是第1001条到第1010条数据。
数据表中的记录默认使用主键(一般为id)排序上面的结果相当于
三次查询时间分别为
3040 ms
3063 ms
3018 ms
针对这种查询方式下面测试查询记录量对时间的影响
三次查询时间如下
查询1条记录3072ms 3092ms 3002ms
查询10条记录3081ms 3077ms 3032ms
查询100条记录3118ms 3200ms 3128ms
查询1000条记录3412ms 3468ms 3394ms
查询10000条记录3749ms 3802ms 3696ms
另外我还做了十来次查询从查询时间来看基本可以确定在查询记录量低于100时查询时间基本没有差距随着查询记录量越来越大所花费的时间也会越来越多。
针对查询偏移量的测试
三次查询时间如下
查询100偏移25ms 24ms 24ms
查询1000偏移78ms 76ms 77ms
查询10000偏移3092ms 3212ms 3128ms
查询100000偏移3878ms 3812ms 3798ms
查询1000000偏移14608ms 14062ms 14700ms
随着查询偏移的增大尤其查询偏移大于10万以后查询时间急剧增加。
这种分页查询方式会从数据库第一条记录开始扫描所以越往后查询速度越慢而且查询的数据越多也会拖慢总查询速度。
使用子查询优化
这种方式先定位偏移位置的 id然后往后查询这种方式适用于 id 递增的情况。
4条语句的查询时间如下
第1条语句3674ms
第2条语句1315ms
第3条语句1327ms
第4条语句3710ms
针对上面的查询需要注意
1、比较第1条语句和第2条语句使用 select id 代替 select * 速度增加了3倍
2、比较第2条语句和第3条语句速度相差几十毫秒
3、比较第3条语句和第4条语句得益于 select id 速度增加第3条语句查询速度增加了3倍
这种方式相较于原始一般的查询方法将会增快数倍。
使用 id 限定优化
这种方式假设数据表的id是连续递增的则我们根据查询的页数和查询的记录数可以算出查询的id的范围可以使用 id between and 来查询
查询时间15ms 12ms 9ms
这种查询方式能够极大地优化查询速度基本能够在几十毫秒之内完成。限制是只能使用于明确知道id的情况不过一般建立表的时候都会添加基本的id字段这为分页查询带来很多便利。
还可以有另外一种写法
当然还可以使用 in 的方式来进行查询这种方式经常用在多表关联的时候进行查询使用其他表查询的id集合来进行查询
这种 in 查询的方式要注意某些 mysql 版本不支持在 in 子句中使用 limit。
关于数据表的id说明
一般情况下在数据库中建立表的时候每一张表强制添加 id 递增字段这样更方便我们查询数据。
如果数据量很大比如像订单这类一般会推荐进行分库分表。这个时候 id 就不建议作为唯一标识了而应该使用分布式的高并发唯一 id 生成器来生成并在数据表中使用另外的字段来存储这个唯一标识。
首先使用范围查询定位 id (或者索引)然后再使用索引进行定位数据即先 select id然后在 select *;这样查询的速度将会提升好几倍。
阅读目录置顶)(长期更新计算机领域知识
阅读目录置顶)(长期更新计算机领域知识
阅读目录置顶)(长期科技领域知识
歌谣带你看java面试题