亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL分頁優化

2024-07-24 13:09:12
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了MySQL分頁優化,內容思路很詳細,有意對MySQL分頁優化的朋友可以參考一下
 

最近,幫同事重寫了一個MySQL SQL語句,該SQL語句涉及兩張表,其中一張表是字典表(需返回一個字段),另一張表是業務表(本身就有150個字段,需全部返回),當然,字段的個數是否合理在這里不予評價。平時,返回的數據大概5w左右,系統尚能收到數據。但12月31日那天,數據量大概20w,導致SQL執行時間過長,未能在規定的時間內反饋結果,于是系統直接報錯。

一般的思路是用MySQL的分頁功能,即直接在原SQL語句后面增加LIMIT子句。但請注意,雖然你看到的反饋結果只是LIMIT后面指定的數量,于是想當然的以為MySQL只是檢索了指定數量的數據,然后給予返回。其實,MySQL內部實現的原理是,檢索所有符合where條件的記錄,然后返回指定數量的記錄。從這個角度來看,直接在原SQL語句后面添加LIMIT子句只能說是一種可以實現功能的方案,但未必最優。

具體在本例中,首先我們來看一下150個字段的表的統計信息:

MySQL,分頁優化

一行大概就占2k,而Innodb默認頁的大小為16k,這意味著,一個頁中最多可存儲8行的數據。隨機讀的可能性大大增加。而這無疑會對數據庫系統的IO造成極大的壓力。 

優化前

如果采用上述方案,即直接在原SQL語句后面增加LIMIT子句,下面,我們來看看它的執行情況。

首先,直接添加LIMIT子句后的SQL語句如下(已省略a1表的150個字段和a2中的一個字段):

 

復制代碼代碼如下:
FROM upay_csys_scquery_txn_log_his a1  LEFT JOIN upay_csys_trans_code a2 on(a1.int_trans_code=a2.trans_code) WHERE STATUS<>'00' AND settle_date=20151230 limit 50000,10000;

其執行時間如下:

 

MySQL,分頁優化

大概執行了32s,絕大部分都花費到Sending data上了。Sending data指的是服務器檢索數據,讀取數據,并將數據返回給客戶端的時間。

關于上述執行結果,有以下幾點需要說明:

1. 這是SQL語句多次執行后的結果,這樣就可以排除結果緩存的影響,事實上,每次查詢的時長都是32s左右。

2. 為什么選用的是limit 50000,10000,而不是0,10000,這個主要是考慮到對于LIMIT子句來說,越到后面,分頁的成本越高。基于此,選擇了中間值來作為分頁的結果。

該語句的執行計劃如下:

MySQL,分頁優化

優化后:

優化的思路:

只對該表的主鍵進行分頁,然后用返回的主鍵作為子查詢的結果,來檢索該表其它字段的值。

改寫后的SQL語句如下:

 

復制代碼代碼如下:
FROM upay_csys_scquery_txn_log_his a1  LEFT JOIN upay_csys_trans_code a2 on(a1.int_trans_code=a2.trans_code) where seq_id in (select seq_id from (select seq_id FROM upay_csys_scquery_txn_log_his a1  WHERE STATUS<>'00' AND settle_date=20151230 order by 1 limit 50000,10000) as t);

其執行時間如下:

 

MySQL,分頁優化

大概3s多,比第一種方案快了差不多10倍,效果顯著。

下面來看看其執行計劃(explain extended)

MySQL,分頁優化

 總結:

1. 改寫后的語句原本如下:

 

復制代碼代碼如下:
FROM upay_csys_scquery_txn_log_his a1  LEFT JOIN upay_csys_trans_code a2 on(a1.int_trans_code=a2.trans_code) where seq_id in (select seq_id FROM upay_csys_scquery_txn_log_his a1  WHERE STATUS<>'00' AND settle_date=20151230 order by 1 limit 50000,10000);

但MySQL報以下錯誤:

 

 

復制代碼代碼如下:
ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

需再增加一個嵌套子查詢,

 

比如這樣的語句是不能正確執行的。 

復制代碼代碼如下:
select * from table where id in (select id from table limit 12);

 

但是,只要你再加一層就行。如: 

復制代碼代碼如下:
select * from table where id in (select t.id from (select * from table limit 12)as t)

 

這樣就可以繞開limit子查詢的問題。 
問題解決。

2. 如果想查看MySQL查詢優化器等價改寫后的SQL語句,可首先通過explain extended得到具體的執行計劃,然后通過show warnings查看。

具體在本例中,等價改寫后的SQL語句如下:

MySQL,分頁優化

與設想中的執行順序一致~

3. 如何查看MySQL語句各步驟的執行時間。

以上就是本文的全部內容,希望對大家MySQL分頁優化有所幫助。



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线视频九色| 精品成人国产在线观看男人呻吟| 成人av资源在线播放| 日本在线观看天堂男亚洲| 日韩国产精品一区| 欧美午夜影院在线视频| 亚洲最大激情中文字幕| 高清一区二区三区日本久| 国产成人精品视| 国内精品免费午夜毛片| 国产精品白嫩初高中害羞小美女| 国产亚洲人成a一在线v站| 秋霞成人午夜鲁丝一区二区三区| 欧美成人激情图片网| 午夜精品一区二区三区av| 亚洲理论片在线观看| 亚洲欧美激情四射在线日| 久久露脸国产精品| 亚洲精品综合精品自拍| 97超级碰在线看视频免费在线看| 久久久久久中文字幕| 欧美电影在线观看网站| 日本精品视频网站| 日韩精品在线视频美女| 国产视频久久久久| 欧美高清自拍一区| 亚洲尤物视频网| 欧美日韩一区二区三区| 韩国视频理论视频久久| 久久综合久中文字幕青草| 久久久久久成人精品| 欧美激情国产高清| 国产日产久久高清欧美一区| 91中文字幕一区| 国产丝袜一区二区| 国产视频福利一区| 亚洲香蕉在线观看| 国产亚洲激情视频在线| 少妇高潮 亚洲精品| 久久久999国产精品| 日韩av快播网址| 久久视频国产精品免费视频在线| 97色在线视频| 最近2019中文字幕第三页视频| 久久久久北条麻妃免费看| 亚洲aa在线观看| 成人网址在线观看| 日韩精品福利网站| 欧美华人在线视频| 国产成人在线一区二区| 在线观看国产精品91| 欧美性高跟鞋xxxxhd| 久久久91精品国产| 国产精品美女www爽爽爽视频| 日韩精品在线观看一区二区| 国产v综合ⅴ日韩v欧美大片| 亚洲精品国精品久久99热一| 九九热精品在线| 亚洲人高潮女人毛茸茸| 91在线色戒在线| 国产精品网站大全| 国产精品久久久久免费a∨| 97超级碰在线看视频免费在线看| 国产精品尤物福利片在线观看| 美女视频黄免费的亚洲男人天堂| 欧美激情综合亚洲一二区| 欧美日韩福利在线观看| 亚洲国产日韩精品在线| 久久国产加勒比精品无码| 成人网在线免费观看| 久久人人爽人人爽人人片av高请| 亚洲精品视频在线观看视频| 国产精品va在线播放我和闺蜜| 伊人久久综合97精品| 日本亚洲精品在线观看| 亚洲黄色成人网| 亚洲精选中文字幕| 亚洲色图第一页| 国产精品久久9| 琪琪亚洲精品午夜在线| 国外成人在线播放| 国产精品视频久久久久| 欧美日韩精品中文字幕| 欧美色图在线视频| 1769国内精品视频在线播放| 97视频在线观看亚洲| 国产精品久久久久久久久久新婚| 亚洲欧美国产另类| 欧美黄色免费网站| 欧美电影免费观看| 精品福利在线看| 92看片淫黄大片欧美看国产片| 精品久久中文字幕| 亚洲美女在线视频| 91精品国产91久久| 亚洲成人在线视频播放| 国产在线视频一区| 日韩在线免费高清视频| 国产香蕉精品视频一区二区三区| 在线播放精品一区二区三区| 国产美女久久精品| 亚洲国产天堂久久综合| 国产精品99久久久久久人| 久久97精品久久久久久久不卡| 久久精品最新地址| 欧美一级免费视频| 黑人与娇小精品av专区| 97香蕉超级碰碰久久免费的优势| 国产日本欧美在线观看| 欧美日韩国产专区| 精品久久久国产| 国产精品视频中文字幕91| 久久久成人的性感天堂| 久久久人成影片一区二区三区观看| 国产精品久久一区| 欧美国产在线电影| 国产激情999| 久久福利视频导航| 亚洲自拍欧美色图| 1769国产精品| 欧美电影免费播放| 亚洲天堂男人天堂| 亚洲韩国青草视频| 久久av红桃一区二区小说| 91夜夜未满十八勿入爽爽影院| 日韩在线不卡视频| 国产精品久久久精品| 久久久久久久久国产| 日韩成人在线视频| 欧美精品久久久久久久久久| 国产成人综合精品在线| 深夜成人在线观看| 国产精品一区av| 成人激情黄色网| 久久免费国产精品1| 日韩精品有码在线观看| 久久久国产视频91| 成人h片在线播放免费网站| 日韩有码在线播放| 日本高清久久天堂| 亚洲激情视频网| 日韩中文字幕免费看| 亚洲天堂免费观看| 少妇久久久久久| 中文字幕亚洲一区二区三区| 欧美日韩中文字幕综合视频| 亚洲人成啪啪网站| 日本伊人精品一区二区三区介绍| 久久精品国产清自在天天线| 日本久久久久亚洲中字幕| 国产中文欧美精品| 国产精品综合网站| 亚洲综合中文字幕在线| 亚洲女成人图区| 欧美日韩亚洲精品内裤| 欧洲成人在线观看| 国产精品电影网站| 国产成人欧美在线观看| 国产日韩精品综合网站| 日韩视频在线观看免费| 亚洲国产精品va在线看黑人动漫| 国产伦精品一区二区三区精品视频| 日本91av在线播放| 欧美成人第一页|