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

首頁 > 數據庫 > MySQL > 正文

MySQL中利用索引對數據進行排序的基礎教程

2024-07-24 13:08:32
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了MySQL中利用索引對數據進行排序的基礎教程,需要的朋友可以參考下
 

MySQL中,有兩種方式生成有序結果集:一是使用filesort,二是按索引順序掃描。利用索引進行排序操作是非??斓模铱梢岳猛凰饕瑫r進行查找和排序操作。當索引的順序與ORDER BY中的列順序相同且所有的列是同一方向(全部升序或者全部降序)時,可以使用索引來排序。如果查詢是連接多個表,僅當ORDER BY中的所有列都是第一個表的列時才會使用索引。其它情況都會使用filesort。

MySQL索引通常是被用于提高WHERE條件的數據行匹配或者執行聯結操作時匹配其它表的數據行的搜索速度。
MySQL也能利用索引來快速地執行ORDER BY和GROUP BY語句的排序和分組操作。
通過索引優化來實現MySQL的ORDER BY語句優化:

create table actor(actor_id int unsigned NOT NULL AUTO_INCREMENT,name   varchar(16) NOT NULL DEFAULT '',password    varchar(16) NOT NULL DEFAULT '',PRIMARY KEY(actor_id), KEY   (name)) ENGINE=InnoDBinsert into actor(name,password) values('cat01','1234567');insert into actor(name,password) values('cat02','1234567');insert into actor(name,password) values('ddddd','1234567');insert into actor(name,password) values('aaaaa','1234567');

 

mysql> explain select actor_id from actor order by actor_id /G
*************************** 1. row ***************************      id: 1 select_type: SIMPLE    table: actor     type: indexpossible_keys: NULL     key: PRIMARY   key_len: 4     ref: NULL     rows: 4    Extra: Using index1 row in set (0.00 sec)

 

mysql> explain select actor_id from actor order by password /G
*************************** 1. row ***************************      id: 1 select_type: SIMPLE    table: actor     type: ALLpossible_keys: NULL     key: NULL   key_len: NULL     ref: NULL     rows: 4    Extra: Using filesort1 row in set (0.00 sec)

 

mysql> explain select actor_id from actor order by name /G
*************************** 1. row ***************************      id: 1 select_type: SIMPLE    table: actor     type: indexpossible_keys: NULL     key: name   key_len: 18     ref: NULL     rows: 4    Extra: Using index1 row in set (0.00 sec)

下面來羅列一些常見的索引對ORFER BY的優化情況:

1、如果一個SQL語句形如:

SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort]?

在[sort]這個欄位上建立索引就可以實現利用索引進行order by 優化。
2、WHERE + ORDER BY的索引優化,形如:

SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort]?

建立一個聯合索引(columnX,sort)來實現order by 優化。
注意:如果columnX對應多個值,如下面語句就無法利用索引來實現order by的優化

SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY[sort]?

3、WHERE+ 多個字段ORDER BY

SELECT * FROM [table] WHERE uid=1 ORDER x,y LIMIT 0,10?

建立索引(uid,x,y)實現order by的優化,比建立(x,y,uid)索引效果要好得多。
MySQL Order By不能使用索引來優化排序的情況
* 對不同的索引鍵做 ORDER BY :(key1,key2分別建立索引)

SELECT * FROM t1 ORDER BY key1, key2?

* 在非連續的索引鍵部分上做 ORDER BY:(key_part1,key_part2建立聯合索引?key2建立索引)

SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2?

* 同時使用了 ASC 和 DESC:(key_part1,key_part2建立聯合索引)

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC?

* 用于搜索記錄的索引鍵和做 ORDER BY 的不是同一個:(key1,key2分別建立索引)

SELECT * FROM t1 WHERE key2=constant ORDER BY key1?

* 如果在WHERE和ORDER BY的欄位上應用表達式(函數)時,則無法利用索引來實現order by的優化

SELECT * FROM t1 ORDER BY YEAR(logindate) LIMIT 0,10?

 

當MySQL不能使用索引進行排序時,就會利用自己的排序算法(快速排序算法)在內存(sort buffer)中對數據進行排序,如果內存裝載不下,它會將磁盤上的數據進行分塊,再對各個數據塊進行排序,然后將各個塊合并成有序的結果集(實際上就是外排序)。對于filesort,MySQL有兩種排序算法。
1.兩遍掃描算法(Two passes)
實現方式是先將須要排序的字段和可以直接定位到相關行數據的指針信息取出,然后在設定的內存(通過參數sort_buffer_size設定)中進行排序,完成排序之后再次通過行指針信息取出所需的Columns。
注:該算法是4.1之前采用的算法,它需要兩次訪問數據,尤其是第二次讀取操作會導致大量的隨機I/O操作。另一方面,內存開銷較小。
2. 一次掃描算法(single pass)
該算法一次性將所需的Columns全部取出,在內存中排序后直接將結果輸出。
注:從 MySQL 4.1 版本開始使用該算法。它減少了I/O的次數,效率較高,但是內存開銷也較大。如果我們將并不需要的Columns也取出來,就會極大地浪費排序過程所需要的內存。在 MySQL 4.1 之后的版本中,可以通過設置 max_length_for_sort_data 參數來控制 MySQL 選擇第一種排序算法還是第二種。當取出的所有大字段總大小大于 max_length_for_sort_data 的設置時,MySQL 就會選擇使用第一種排序算法,反之,則會選擇第二種。為了盡可能地提高排序性能,我們自然更希望使用第二種排序算法,所以在 Query 中僅僅取出需要的 Columns 是非常有必要的。

當對連接操作進行排序時,如果ORDER BY僅僅引用第一個表的列,MySQL對該表進行filesort操作,然后進行連接處理,此時,EXPLAIN輸出“Using filesort”;否則,MySQL必須將查詢的結果集生成一個臨時表,在連接完成之后進行filesort操作,此時,EXPLAIN輸出“Using temporary;Using filesort”。



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩免费看aⅴ视频| 国产日韩欧美日韩大片| 亚洲男女自偷自拍图片另类| 欧美黑人xxx| 久久精品免费播放| 亚洲欧美日韩网| 亚洲丁香久久久| 日本免费一区二区三区视频观看| 欧美激情视频一区二区| 国产精品视频白浆免费视频| 欧美裸体视频网站| 日韩精品在线观看一区二区| 中文字幕亚洲综合| 成人黄色中文字幕| 日韩欧美一区二区在线| 91久久久久久久久| 成人免费视频a| 国产精品久久激情| 全色精品综合影院| 68精品国产免费久久久久久婷婷| 亚洲精品美女久久| 91成品人片a无限观看| 富二代精品短视频| 国产一区二区三区在线观看网站| 亚洲天堂开心观看| 2019精品视频| 亚洲精品白浆高清久久久久久| 日韩免费在线免费观看| 日韩精品视频免费在线观看| 久久色免费在线视频| 福利一区视频在线观看| 97视频免费观看| 成人黄色在线播放| 亚洲欧洲成视频免费观看| 亚洲性av网站| 久久精品99久久久久久久久| 亚洲精品一区二区三区不| 久久男人资源视频| 亚洲第一天堂无码专区| 国产精品96久久久久久又黄又硬| 久久躁日日躁aaaaxxxx| 国产精品欧美一区二区| 色悠悠国产精品| 亚洲精品美女在线观看| 日韩av三级在线观看| 中文国产成人精品久久一| 国产精品com| 欧美一级片一区| 国产日韩av在线播放| 黑人巨大精品欧美一区二区免费| 自拍偷拍亚洲一区| 精品国内产的精品视频在线观看| 亚洲精选在线观看| 黑人巨大精品欧美一区二区一视频| 欧美大码xxxx| 亚洲一区二区久久久久久久| 国模精品一区二区三区色天香| 国语自产偷拍精品视频偷| 国产精品免费视频久久久| 国产a∨精品一区二区三区不卡| 国产一区二区三区在线| 中文字幕av一区二区三区谷原希美| 在线亚洲午夜片av大片| 欧美洲成人男女午夜视频| 日本亚洲欧洲色α| 欧美疯狂性受xxxxx另类| 4438全国亚洲精品在线观看视频| 成人日韩av在线| 亚洲黄色av女优在线观看| 亚洲va欧美va国产综合久久| 国产日韩在线看| 精品视频偷偷看在线观看| 欧美另类xxx| 午夜精品一区二区三区在线视| 97免费在线视频| 91视频88av| 日韩一中文字幕| 国产精品久久久久久久av电影| 黄网站色欧美视频| 久久99精品久久久久久噜噜| 亚洲日韩中文字幕| 欧美日韩中文字幕| 色综合色综合网色综合| 成人黄色免费在线观看| 中文字幕欧美专区| 亚洲精品第一国产综合精品| 亚洲成av人片在线观看香蕉| 亚洲天堂成人在线视频| 97精品一区二区三区| 亚洲激情中文字幕| 国产精品亚洲аv天堂网| 91大神在线播放精品| 欧洲美女免费图片一区| 日韩在线观看免费高清| 国产精品免费网站| 97精品伊人久久久大香线蕉| 亚洲天堂免费视频| 成人福利在线观看| 久久视频精品在线| 国产成人精品视频在线观看| 国产亚洲成精品久久| 欧美成aaa人片免费看| 伊人久久综合97精品| 91成人天堂久久成人| xxxxx成人.com| 4p变态网欧美系列| 久久久久久久久久久国产| 国模gogo一区二区大胆私拍| 亚洲性生活视频在线观看| 国产精品久久久久久久久久尿| 欧美国产日韩一区| 茄子视频成人在线| 国产精品福利无圣光在线一区| 亚洲欧洲视频在线| 国产美女主播一区| 欧美噜噜久久久xxx| 国产精品午夜一区二区欲梦| 亚洲人成绝费网站色www| 国产成人午夜视频网址| 亚洲黄页网在线观看| 久久香蕉频线观| 亚洲无线码在线一区观看| 国产一区二区日韩精品欧美精品| 尤物九九久久国产精品的分类| 欧美日韩在线视频一区二区| 91av在线网站| 亚洲国产欧美一区二区三区同亚洲| 欧美成人中文字幕在线| 日韩欧美一区二区在线| 欧美亚洲视频在线观看| 精品久久久在线观看| 91理论片午午论夜理片久久| 欧美裸体xxxx| 国产精品久久久久久搜索| 久久久久久av| 成人写真视频福利网| 亚洲精品在线不卡| 国产免费成人av| 久久频这里精品99香蕉| 亚洲影院色无极综合| 亚洲自拍偷拍网址| 日韩av综合网站| 粉嫩av一区二区三区免费野| 久久成人在线视频| 成人欧美一区二区三区黑人孕妇| 国产精品99久久久久久久久久久久| 日韩电影在线观看永久视频免费网站| 日韩中文字幕精品视频| 欧美激情欧美狂野欧美精品| 爽爽爽爽爽爽爽成人免费观看| 成人午夜在线视频一区| 亚洲成人久久一区| 98精品国产自产在线观看| 91精品视频免费观看| 欧美在线视频导航| 久久精品久久久久| 日韩av在线网站| 久久免费国产视频| 欧美专区在线视频| 亚洲自拍偷拍色片视频| 久久人人爽人人| 亚洲欧美中文另类| 亚洲欧美日韩成人| 久久999免费视频|