在MySQL中的ORDER BY有兩種排序實現方式:
1、利用有序索引獲取有序數據
2、文件排序
在使用explain分析查詢的時候,利用有序索引獲取有序數據顯示Using index。而文件排序顯示Using filesort。
1.利用有序索引獲取有序數據
取出滿足過濾條件作為排序條件的字段,以及可以直接定位到行數據的行指針信息,在 Sort Buffer 中進行實際的排序操作,然後利用排好序的數據根據行指針信息返回表中取得客戶端請求的其他字段的數據,再返回給客戶端.
這種方式,在使用explain分析查詢的時候,顯示
Using index。而文件排序顯示
Using filesort。
注意:MySQL在查詢時最多只能使用一個索引。因此,如果WHERE條件已經占用了索引,那麼在排序中就不使用索引了。
1.1 按照索引對結果進行排序:order by 使用索引是有條件
1) 返回選擇的字段,即只包括在有選擇的此列上(
select後面的字段),不一定適應*的情況):
CREATE TABLE `test` (
`id` int(11) NOT NULLAUTO_INCREMENT,
`rdate` datetime NOT NULL,
`inventid` int(11) NOT NULL,
`customerid` int(11) NOT NULL,
`staffid` int(11) NOT NULL,
`data` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `rdate`(`rdate`,`inventid`,`customerid`),
KEY `inventid` (`inventid`),
KEY `customerid` (`customerid`),
KEY `staffid` (`staffid`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=latin1
mysql>
explain select inventid from test where rdate='2011-12-1400:00:00' order by inventid , customerid;