国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務器之家 - 數(shù)據(jù)庫 - Mysql - MySQL分頁優(yōu)化

MySQL分頁優(yōu)化

2020-06-05 19:51iVictor Mysql

這篇文章主要為大家詳細介紹了MySQL分頁優(yōu)化,內(nèi)容思路很詳細,有意對MySQL分頁優(yōu)化的朋友可以參考一下

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

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

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

MySQL分頁優(yōu)化

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

優(yōu)化前

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

首先,直接添加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;


其執(zhí)行時間如下:

MySQL分頁優(yōu)化

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

關于上述執(zhí)行結(jié)果,有以下幾點需要說明:

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

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

該語句的執(zhí)行計劃如下:

MySQL分頁優(yōu)化

優(yōu)化后:

優(yōu)化的思路:

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

改寫后的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);


其執(zhí)行時間如下:

MySQL分頁優(yōu)化

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

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

MySQL分頁優(yōu)化

 總結(jié):

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'


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

比如這樣的語句是不能正確執(zhí)行的。

復制代碼 代碼如下:
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查詢優(yōu)化器等價改寫后的SQL語句,可首先通過explain extended得到具體的執(zhí)行計劃,然后通過show warnings查看。

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

MySQL分頁優(yōu)化

與設想中的執(zhí)行順序一致~

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

以上就是本文的全部內(nèi)容,希望對大家MySQL分頁優(yōu)化有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久一区| 99re视频 | 伊人99| 成人免费在线小视频 | 一区在线免费 | 日韩精品成人 | 国产一级黄色 | 毛片免费观看 | 天天操天天碰 | 欧美日韩国产一区二区三区 | 精品毛片 | 久久久毛片 | 中文字幕日韩欧美 | 黄在线免费观看 | 日韩免费av| 好看的国产精彩视频 | 龙珠z普通话国语版在线观看 | 色久综合 | 国产免费黄色 | 国产激情在线看 | 国产精品久久久久久一区二区三区 | 久久久精 | 国产成人精品一区二区 | 在线午夜电影 | 国产一级纯肉体一级毛片 | 五月天导航 | 春色导航| 成年人免费看片 | 欧美黄色免费网址 | 影音先锋网址 | 成人午夜电影在线观看 | 国产精品久久久久久av下载网址 | 亚洲欧美激情视频 | 一区二区三区在线播放视频 | 免费看黄色一级视频 | 国产精品一区二区无线 | 国产噜噜噜噜噜久久久久久久久 | 中国一级黄色片子 | 久久噜 | 亚洲第一成人在线视频 | 亚洲欧洲日韩 |