国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MySQL數據庫ORDER BY優化總結(為排序使用索引)

數據庫 MySQL
在使用order by時,經常出現Using filesort,所以對于此類sql語句我們需要去盡力優化,使其盡量使用Using index。那么,我們對于這類型的語句我們怎么去做優化呢?

在使用order by時,經常出現Using filesort,所以對于此類sql語句我們需要去盡力優化,使其盡量使用Using index。

那么,我們對于這類型的語句我們怎么去做優化呢?因為這一塊還是比較容易混淆的,所以我弄了個實驗,相信大家跟我一起做下實驗就都能理解了~

[[285871]]

1. 環境準備

  1. drop table if exists test; 
  2. create table test( 
  3. id int primary key auto_increment, 
  4. c1 varchar(10), 
  5. c2 varchar(10), 
  6. c3 varchar(10), 
  7. c4 varchar(10), 
  8. c5 varchar(10) 
  9. ENGINE=INNODB default CHARSET=utf8
  10.  
  11. insert into test(c1,c2,c3,c4,c5) values('a1','a2','a3','a4','a5'); 
  12. insert into test(c1,c2,c3,c4,c5) values('b1','b2','b3','b4','b5'); 
  13. insert into test(c1,c2,c3,c4,c5) values('c1','c2','c3','c4','c5'); 
  14. insert into test(c1,c2,c3,c4,c5) values('d1','d2','d3','d4','d5'); 
  15. insert into test(c1,c2,c3,c4,c5) values('e1','e2','e3','e4','e5'); 

mysql數據庫ORDER BY優化總結(為排序使用索引)

2. 創建btree索引

  1. create index idx_c1234 on test(c1,c2,c3,c4); 
  2. show index from test; 

mysql數據庫ORDER BY優化總結(為排序使用索引)

3. 范圍掃導致全表掃描

  1. explain select * from test where c1>'a1' order by c1; 

mysql數據庫ORDER BY優化總結(為排序使用索引)

分析:

  • 在c1,c2,c3,c4上創建了索引,直接在c1上使用范圍,導致了索引失效,全表掃描:type=ALL,ref=Null。因為此時c1主要用于排序,并不是查詢。
  • 使用c1進行排序,出現了Using filesort。
  • 解決方法:使用覆蓋索引。

4、覆蓋索引--》優化

  1. explain select c1 from testwhere c1>'a1' order by c1; 

mysql數據庫ORDER BY優化總結(為排序使用索引)

分析:

  • 使用了覆蓋索引,不走全掃,走索引范圍掃描
  • 排序時按照索引的順序,所以不會出現Using filesort。

這里不懂沒關系,后面我會分享索引的八大法則,保證看得懂...

5. 沒有按最左列索引排序

  1. explain select c1 from testwhere c1>'a1' order by c2; 

mysql數據庫ORDER BY優化總結(為排序使用索引)

分析:

這里出現了Using filesort,是因為排序用的c2,與索引的創建順序(c1,c2,c3,c4)不一致。

6. 排序索引列與索引創建的順序相反

  1. explain select c1 from testwhere c1>'a1' order by c2,c1; 

mysql數據庫ORDER BY優化總結(為排序使用索引)

分析:

這里出現了Using filesort。因為排序索引列(c2,c1)與索引創建的順序(c1,c2)相反,從而產生了重排,也就出現了Using filesort。

7. order by索引列排序不一致

  1. explain select c1 from testwhere c1>'a1' order by c1 asc,c2 desc; 

mysql數據庫ORDER BY優化總結(為排序使用索引)

分析:

雖然排序的字段列與索引順序一樣,且order by默認升序,這里c2 desc變成了降序,導致與索引的排序方式不同,從而產生Using filesort。如果是order by c1 asc,c2 asc或者order by c1 desc,c2 desc就會是using index了。

實驗總結

1. MySQL支持兩種方式的排序filesort和index

Using index是指MySQL掃描索引本身完成排序。index效率高,filesort效率低。

2. 為排序使用索引

假設KEY test(a,b,c)

(1) order by 能使用索引最左前綴

  1. -order by a 
  2. -order by a,b 
  3. -order by a,b,c 
  4. -order by a asc,b asc,c asc 
  5. -order by a desc,b desc,c desc 

(2) 如果where使用索引最左前綴定位為常量,則order by可以使用索引

  1. -where aconst order by b,c 
  2. -where aconst and bconst order by c 
  3. -where aconst and b> consst order by b,c 

(3) 不能使用索引進行排序

  1. -order by a asc,b desc, c desc /*排序不一致*/ 
  2. -where g=const order by b,c /*丟失a索引*/ 
  3. -where a=const order by c /*丟失b索引*/ 
  4. -where a=const order by a,d /*d不是索引一部分*/ 
  5. -where a in (....) order by b,c /*對于排序來說,多個相等條件也是范圍查詢*/ 

3. filesort有兩種排序算法:雙路排序和單路排序

雙路排序:在MySQL4.1之前使用雙路排序,就是兩次磁盤掃描,得到最終數據。讀取行指針和order by列,對他們進行排序,然后掃描已經排好序的列表,按照列表中的值重新從列表中讀取對應的數據輸出。即從磁盤讀取排序字段,在buffer進行排序,再從磁盤取其他字段。如果使用雙路排序,取一批數據要對磁盤進行兩次掃描,眾所周知,I/O操作是很耗時的,因此在MySQL4.1以后,出現了改進的算法:單路排序。

單路排序:從磁盤中查詢所需的列,按照order by列在buffer中對它們進行排序,然后掃描排序后的列表進行輸出。它的效率更高一些,避免了第二次讀取數據,并且把隨機I/O變成了順序I/O,但是會使用更多的空間,因為它把每一行都保存在內存中了。但當讀取數據超過sort_buffer的容量時,就會導致多次讀取數據,并創建臨時表,最后多路合并,產生多次I/O,反而增加其I/O運算。

解決方式:

  • 增加sort_buffer_size參數的設置。
  • 增大max_length_for_sort_data參數的設置。

4. 提升order by速度

  • 在使用order by時,不要用select *,只查詢所需的字段。因為當查詢字段過多時,會導致sort_buffer不夠,從而使用多路排序或進行多次I/O操作。
  • 增加sort_buffer_size。
  • 增加max_length_for_sort_data。

5. 優化group by

group by與order by很類似,其實質是先排序后分組,遵照索引創建順序的最佳左前綴法則。當無法使用索引列的時候,也要對sort_buffer_size和max_length_for_sort_data參數進行調整。注意where高于having,能寫在where中的限定條件就不要去having限定了。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2011-07-29 15:31:52

Oracle數據庫ORDER BY

2011-07-28 16:16:27

MySQL數據庫索引ORDER BY

2016-12-12 13:07:57

數據庫優化SQL

2020-10-19 19:45:58

MySQL數據庫優化

2018-06-26 15:58:06

數據庫MySQL索引優化

2011-03-03 17:56:52

MySQL數據庫優化

2011-03-08 08:49:55

MySQL優化單機

2010-05-21 12:15:52

2014-07-18 09:33:53

數據庫數據庫優化

2019-01-02 11:10:40

MySQL數據庫數據庫設計

2016-12-29 12:24:33

MySQL數據庫移植

2011-08-15 18:09:46

查詢性能調優索引優化

2010-12-10 10:17:21

關系型數據庫

2013-01-04 10:00:12

MySQL數據庫數據庫查詢優化

2011-08-05 09:15:27

MySQL數據庫索引

2011-07-19 16:36:25

Audit插件MySQL數據庫

2010-06-04 11:28:05

MySQL數據庫

2019-10-08 08:46:59

mysql數據庫SQL

2009-03-11 15:40:20

2019-04-02 10:36:17

數據庫MySQL優化方法
點贊
收藏

51CTO技術棧公眾號

三上悠亚在线免费观看| 国产成人a级片| 久久国产免费| 中文字幕第一区综合| 日韩亚洲视频| 欧美a一欧美| 一区二区三区视频免费在线观看| 四虎电影院在线观看| 久久麻豆一区二区| 亚洲欧美日韩在线综合 | 99aiav| 国产一区二区在线观看视频| 精品999在线观看| 天天精品视频| 国产精品亚洲片夜色在线| 日韩激情综合| 色狠狠久久aa北条麻妃| 亚洲优女在线| 精品av综合导航| 性欧美高清come| 日韩一区二区三区精品视频| 69xxxx欧美| 欧美日韩的一区二区| 91精品国产91久久久久游泳池 | 国产精品毛片a∨一区二区三区| 亚洲 欧美 综合 另类 中字| 狠狠色丁香久久婷婷综合丁香| 亚洲综合av一区| 激情综合五月婷婷| 国产高清www| www亚洲一区| 男捅女免费视频| 图片区小说区国产精品视频| 日韩黄色网址| 欧美日韩一区二区三区在线| av网址在线播放| 日韩国产高清污视频在线观看| 欧美日韩不卡| 欧美激情网站在线观看| 国产精品流白浆在线观看| 2019日本中文字幕| 欧美色图一区| 国产精品久久一区二区三区| 夜夜爽av福利精品导航| 欧美日韩一区二区视频在线| 国产在线精品不卡| 国产在线青青草| 一区二区三区精品在线| 丁香在线视频| 亚洲女人天堂色在线7777| 中文字幕区一区二区三| 国产精品狠色婷| 在线一区免费观看| 男人天堂成人网| 国产精品欧美一区喷水| 日韩在线无毛| 精品无人区太爽高潮在线播放 | 91亚洲精品丁香在线观看| 激情综合自拍| 看全色黄大色大片| 国产欧美精品区一区二区三区| 国产不卡视频| 在线亚洲一区观看| 亚洲欧美小说色综合小说一区| 久热精品视频在线| 日韩黄色大片网站| 日本一区二区免费看| 国产a区久久久| 成本人h片动漫网站在线观看 | 日韩不卡在线观看日韩不卡视频| 伊人久久av导航| 欧美国产禁国产网站cc| 奇米影视888狠狠狠777不卡| 欧美精品一区二区三区蜜臀| 亚洲一区二区三区四区电影| 99se婷婷在线视频观看| 国产精品一区二区x88av| 国产精品午夜久久久久久| 91精品久久久久久久91蜜桃| 国产精品一区二区三区www| 成人精品久久久| 国产在线精品免费av| 黄色av免费| 亚洲男人天堂手机在线| 欧美理论电影在线精品| 视频一区亚洲| 国产精品进线69影院| 毛片在线不卡| 久久久久中文字幕| 久久免费黄色| 91破解版在线看| 国产亚洲精品美女久久久久| 欧美日韩网址| 久久99999| 日韩高清不卡av| 欧美永久精品| metart日本精品嫩模| 亚洲精品综合精品自拍| 在线精品视频在线观看高清| 性生活免费在线观看| 亚洲国产精彩中文乱码av| 国产乱码精品一区二区亚洲| 精品无码国产一区二区三区av| 在线观看亚洲一区| youjizz亚洲| 国产免费xxx| 91福利小视频| 欧美午夜寂寞| 九色在线视频观看| 亚洲成人a级网| 亚洲精品麻豆| 亚洲男人天堂| 日韩av电影国产| 久久网站最新地址| av在线日韩| 中文字幕中文字幕一区三区| 91福利视频网站| 久久综合国产| 日日噜噜噜夜夜爽爽狠狠| 精品国产一区二区三区久久狼5月| 中日韩男男gay无套| 91美女在线| 欧洲s码亚洲m码精品一区| 2024国产精品| 99久久这里有精品| 日韩欧美不卡在线| 精品亚洲永久免费精品| 视频精品一区二区| 中文字幕中文字幕在线十八区| 99久热re在线精品视频| 亚洲午夜久久久久中文字幕久| 一区二区三区四区视频免费观看| 久在线观看视频| 久久精品国产v日韩v亚洲| 成人av资源在线| 久久99久久久精品欧美| 欧美日韩不卡在线视频| 亚洲欧美制服综合另类| 精品在线播放午夜| av手机在线观看| 中国成人亚色综合网站| 日韩精品在线观看一区| 国产综合色精品一区二区三区| 唐人社导航福利精品| 国产精彩视频一区二区| 久久成人精品电影| 国产精品久久久一区麻豆最新章节| 99精品国产一区二区三区2021| 天堂中文字幕一二区| 国产精品旅馆在线| 91传媒视频在线播放| 99亚洲一区二区| 亚洲涩涩在线| 国产精品va无码一区二区| 久久五月情影视| 中文字幕一区二区三区在线播放| 亚洲国产欧美日韩在线观看第一区| 日本视频一二区| 91精品国产综合久久久久久蜜臀| 亚洲一区二区视频在线| 亚洲电影影音先锋| 国产在线欧美日韩| 欧美精品在线观看一区二区| 日韩二区在线观看| 欧美天堂视频| 国产一级不卡毛片| 国产精品成人播放| 色综合久久九月婷婷色综合| 日韩午夜电影| 中文av在线全新| 丰满少妇在线观看| 国产一区欧美二区三区| 在线不卡免费av| 波多野结衣中文一区| 欧美电影在线观看完整版| 亚洲kkk444kkk在线观看| 欧美精品二区三区四区免费看视频 | 亚洲一区二区三区四区在线播放 | 国产欧美在线观看| 日韩欧美国产成人| 天堂一区二区在线| 日本在线一区二区| 黄动漫在线免费观看| 欧美日韩在线一区二区三区| 久久激情视频久久| 欧美视频在线视频| 国产精品自拍三区| blacked蜜桃精品一区| 图片区小说区亚洲| 成人免费淫片免费观看| 免费亚洲精品视频| 欧美精品国产精品日韩精品| 欧美日韩亚洲综合一区二区三区| www.一区二区| 欧美精品观看| 国产精品视频一区视频二区| av国产在线观看| 国产成人生活片| 国产日韩在线一区| 亚洲美女喷白浆|