程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysqlfilesort

mysqlfilesort

編輯:MySQL綜合教程

在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;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved