必威的官网网络

当前位置:必威的官网-必威体育 > 必威的官网网络 > 因为只扫描n行

因为只扫描n行

来源:http://www.jlqfjt.com 作者:必威的官网-必威体育 时间:2019-12-11 03:54

原先本身在mysql中分页都以用的 limit 100000,20那样的情势,笔者相信您也是啊,但是要提升功用,让分页的代码功效更加高级中学一年级些,越来越快一些,那大家又该如何做吧?

首先有的:看一下分页的基本原理:

复制代码 代码如下:

mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20
***************** 1. row **************
id: 1
select_type: SIMPLE
table: message
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 10020
Extra:
1 row in set (0.00 sec)

对地方的mysql语句表明:limit 10000,20的意味扫描满足条件的10020行,扔掉前边的10000行,再次回到最终的20行,难题就在那处,假诺是limit 100000,100,要求扫描100100行,在四个高并发的选取里,每一次查询要求扫描当先10W行,性能确定大巨惠扣。文中还涉及limit n质量是没难题的,因为只扫描n行。

其次部分:依据雅虎的三人程序猿带来了风度翩翩篇Efficient Pagination Using MySQL的报告剧情扩大:在文中提到后生可畏种clue的做法,给翻页提供部分头脑,比方照旧SELECT * FROM message OTiguanDERubicon BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目款项id最大的是1020,最小的是1000,假诺大家只提供上后生可畏页、下少年老成页这样的跳转(不提供到第N页的跳转),那么在管理上大器晚成页的时候SQL语句能够是:

复制代码 代码如下:

SELECT * FROM message WHERE id>1020 ORDER BY id ASC LIMIT 20;//下一页

拍卖下一页的时候SQL语句能够是:

复制代码 代码如下:

SELECT * FROM message WHERE id<1000 ORDER BY id DESC LIMIT 20;//上一页

不管翻多少页,每一次查询只扫描20行。

缺陷是只好提供上黄金时代页、下生龙活虎页的链接形式,不过我们的成品经营特别中意“上生机勃勃页 1 2 3 4 5 6 7 8 9 下黄金时代页”那样的链接格局,如何做吧?

假定LIMIT m,n不可幸免的话,要优化作用,唯有硬着头皮的让m小一下,大家增加后边的clue做法,照旧SELECT * FROM message O路虎极光DECRUISER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条约id最大的是2519,最小的是2500;

当是第10页的SQL如下:

复制代码 代码如下:

SELECT * FROM tb_goods_info WHERE auto_id >=2500 ORDER BY auto_id ASC LIMIT 0,20

比方要跳到第9页,SQL语句能够如此写:

复制代码 代码如下:

SELECT * FROM tb_goods_info WHERE auto_id <2500 ORDER BY auto_id desc LIMIT 0,20

比如要跳到第8页,SQL语句能够这么写:

复制代码 代码如下:

SELECT * FROM tb_goods_info WHERE auto_id <2500 ORDER BY auto_id desc LIMIT 20,20

比方说要跳到第7页,SQL语句能够那样写:

复制代码 代码如下:

SELECT * FROM tb_goods_info WHERE auto_id <2500 ORDER BY auto_id desc LIMIT 40,20

跳转到第11页:

复制代码 代码如下:

SELECT * FROM tb_goods_info WHERE auto_id >2519 ORDER BY auto_id asc LIMIT 0,20

跳转到第12页:

复制代码 代码如下:

SELECT * FROM tb_goods_info WHERE auto_id >2519 ORDER BY auto_id asc LIMIT 20,20

跳转到第13页:

复制代码 代码如下:

SELECT * FROM tb_goods_info WHERE auto_id >2519 ORDER BY auto_id asc LIMIT 40,20

原理依然相近,记录住当前页id的最大值和纤维值,计算跳转页面和当前页相对偏移,由于页面周边,这几个偏移量不会比比较大,那样的话m值绝对很小,大大减少扫描的行数。其实守旧的limit m,n,绝对的舞狮一直是首先页,这样的话越翻到背后,功效越差,而地点给出的章程就从不比此的难题。

瞩目SQL语句里面包车型大巴ASC和DESC,假使是ASC收取来的结果,展现的时候记得倒置一下。

已在60W数据总量的表中测量检验,效果十二分家喻户晓

limit 100000,20这么的方式,笔者深信您也是啊,可是要升高功能,让分页的代码效能更加高级中学一年级些,更加快一些,那我们又...

本文由必威的官网-必威体育发布于必威的官网网络,转载请注明出处:因为只扫描n行

关键词: 必威平台

上一篇:然后再次进到注册表HKEY

下一篇:没有了