MySQL Order By語法
代碼如下 復制代碼SELECT column_name(s) FROM table_name ORDER BY column_name
注意:SQL語句是“字母大小寫不敏感”的語句(它不區分字母的大小寫),即:“ORDER BY”和“order by”是一樣的。
MySQL Order By案例
下面的例子:從“Person”表中選取所有記錄,並將“Age”列進行分類:
代碼如下 復制代碼 <?php
上面的代碼將輸出下面的結果:
Glenn Quagmire 33
Peter Griffin 35
按照升序或者降序進行分類排列
如果你使用了“ORDER BY”關鍵詞,所有記錄將按照默認的升序進行排列(即:從1到9,從a到z)
使用“DESC”關鍵詞可以制定所有的數據按照降序排列(即:從9到1,從z到a):
雙擊代碼全選 123 SELECT column_name(s) FROM table_name ORDER BY column_name DESC
MySQL Order By根據兩列進行分類
很多時候,我們需要同時根據兩列內容(或者更多列)來對數據進行分類。當指定的列數多於一列時,僅在第一列的值完全相同時才參考第二列:
雙擊代碼全選 123 SELECT column_name(s) FROM table_name ORDER BY column_name1, column_name2
通過索引優化來實現MySQL的ORDER BY語句優化:
1、ORDER BY的索引優化。如果一個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一次查詢只能使用一個索引。如果要對多個字段使用索引,建立復合索引。
>越小的數據類型通常更好:越小的數據類型通常在磁盤、內存和CPU緩存中都需要更少的空間,處理起來更快。
>簡單的數據類型更好:整型數據比起字符,處理開銷更小,因為字符串的比較更復雜。在MySQL中,應該用內置的日期和時間數據類型,而不是用字符串來存儲時間;以及用整型數據類型存儲IP地址。
>盡量避免NULL:應該指定列為NOT NULL,除非你想存儲NULL。在MySQL中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計信息以及比較運算更加復雜。你應該用0、一個特殊的值或者一個空串代替空值。
>在ORDER BY操作中,MySQL只有在排序條件不是一個查詢條件表達式的情況下才使用索引。