日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

MySQL大數(shù)據(jù)量使用limit分頁,隨著頁碼的增大,查詢效率越低下。

1. 直接用limit start, count分頁語句, 也是我程序中用的方法:

select * from product limit start, count當起始頁較小時,查詢沒有性能問題,我們分別看下從10, 100, 1000, 10000開始分頁的執(zhí)行時間(每頁取20條), 如下:

select * from product limit 10, 20   --0.016秒
select * from product limit 100, 20   --0.016秒
select * from product limit 1000, 20   --0.047秒
select * from product limit 10000, 20   --0.094秒

我們已經(jīng)看出隨著起始記錄的增加,時間也隨著增大, 這說明分頁語句limit跟起始頁碼是有很大關系的,那么我們把起始記錄改為40w看下(也就是記錄的一般左右)

select * from product limit 400000, 20 --3.229秒

再看我們取最后一頁記錄的時間

select * from product limit 866613, 20 --37.44秒

難怪搜索引擎抓取我們頁面的時候經(jīng)常會報超時,像這種分頁最大的頁碼頁顯然這種時間是無法忍受的。

從中我們也能總結出兩件事情:1)limit語句的查詢時間與起始記錄的位置成正比 2)mysql的limit語句是很方便,但是對記錄很多的表并不適合直接使用。

2. 對limit分頁問題的性能優(yōu)化方法

利用表的覆蓋索引來加速分頁查詢我們都知道,利用了索引查詢的語句中如果只包含了那個索引列(覆蓋索引),那么這種情況會查詢很快。

因為利用索引查找有優(yōu)化算法,且數(shù)據(jù)就在查詢索引上面,不用再去找相關的數(shù)據(jù)地址了,這樣節(jié)省了很多時間。另外Mysql中也有相關的索引緩存,在并發(fā)高的時候利用緩存就效果更好了。

在我們的例子中,我們知道id字段是主鍵,自然就包含了默認的主鍵索引?,F(xiàn)在讓我們看看利用覆蓋索引的查詢效果如何:

這次我們之間查詢最后一頁的數(shù)據(jù)(利用覆蓋索引,只包含id列),如下:select id from product limit 866613, 20 0.2秒相對于查詢了所有列的37.44秒,提升了大概100多倍的速度

那么如果我們也要查詢所有列,有兩種方法,一種是id>=的形式,另一種就是利用join,看下實際情況:

SELECT * FROM product WHERE ID > =(select id from product limit 866613, 1) limit 20

即:

SELECT * FROM product WHERE ID > =(select id from product limit offset, 1) limit count

查詢時間為0.2秒,簡直是一個質的飛躍

另一種寫法

SELECT * FROM product a JOIN (select id from product limit 866613, 20) b ON a.ID = b.id

即:

SELECT * FROM product a JOIN (select id from product limit offset, count) b ON a.ID = b.id

3.實戰(zhàn)

device_point表有3000多w數(shù)據(jù),主鍵為id(uuid),需要分頁查詢

1. id≥寫法

SELECT * FROM device_point
WHERE id >= (SELECT id FROM device_point where del_flag = 0 LIMIT 25000000,1) LIMIT 200;  

EXPLAIN執(zhí)行時間:14.41s

起始ID

25000000

25102000

25104000

25106000

執(zhí)行時間

10.590s

4.315s

4.315s

4.529s

 

2.join寫法

SELECT * FROM device_point dp
JOIN (SELECT id FROM device_point WHERE del_flag = 0 LIMIT 26000000,200) tmp
ON dp.id = tmp.id

EXPLAIN執(zhí)行時間:0.031s

起始ID

26000000

26002000

26002000

26002000

執(zhí)行時間

10.590s

4.484s

4.484s

4.484s

分享到:
標簽:MySQL
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定