萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL Order by 語句用法與優化詳解

MySQL Order by 語句用法與優化詳解

Order by語句是用來排序的,經常我們會使用到Order by來進行排序,下面我給大家來講講Order by用法與優化排序,有需要的同學可參考。

MySQL Order By keyword是用來給記錄中的數據進行分類的。

MySQL Order By Keyword根據關鍵詞分類

ORDER BY keyword是用來給記錄中的數據進行分類的。

 代碼如下 復制代碼


SELECT column_name(s)
FROM table_name
ORDER BY column_name


例子

SQL創建代碼:

 代碼如下 復制代碼

CREATE TABLE IF NOT EXISTS mysql_order_by_test (

  uid int(10) NOT NULL AUTO_INCREMENT,

  name char(80) NOT NULL,

  sex tinyint(1) NOT NULL,

  KEY uid (uid)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

 
INSERT INTO mysql_order_by_test (uid, name, sex) VALUES(1, 'www.111cn.net', 1);

INSERT INTO mysql_order_by_test (uid, name, sex) VALUES(2, '李四', 2);

INSERT INTO mysql_order_by_test (uid, name, sex) VALUES(3, '王二麻子', 1); 


通過索引優化來實現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子句,而不需要額外的排序。where條件和order by使用相同的索引,並且order by的順序和索引順序相同,並且order by的字段都是升序或者都是降序。

例如:下列sql可以使用索引。

 代碼如下 復制代碼     SELECT * FROM t1 ORDER BY key_part1,key_part2,... ;
    SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;
    SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC;

 
但是以下情況不使用索引:

 代碼如下 復制代碼

①SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
--order by的字段混合ASC和DESC

②SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

--用於查詢行的關鍵字與ORDER BY中所使用的不相同

③SELECT * FROM t1 ORDER BY key1, key2;
--對不同的關鍵字使用ORDER BY:

copyright © 萬盛學電腦網 all rights reserved