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

2021-07-13 09:56:45 字數 2172 閱讀 8128

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

複製**

**如下:

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,

*** tinyint(1) not null,

key uid (uid)

) engine=myisam  default charset=utf8 auto_increment=4 ;

insert into mysql_order_by_test (uid, name, ***) values(1, 'www.jb51.net', 1);

insert into mysql_order_by_test (uid, name, ***) values(2, '李四', 2);

insert into mysql_order_by_test (uid, name, ***) 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:

Mysql order by語句的優化

在某些情況中,mysql可以使用乙個索引來滿足order by子句,而不需要額外的排序。where條件和order by使用相同的索引,並且order by的順序和索引順序相同,並且order by的字段都是公升序或者都是降序。例如 下列sql可以使用索引。select from t1 order ...

MySQL order by 語句對null值排序

今天在寫sql中,遇到對 null 值進行排序的問題,發現在mysql中,null為最小值。如果我們在排序欄位中,存在null的情況,那麼我們需要手動指定 null 的順序。先看一下原始資料 查詢結果如下 先按rank公升序,null放在最後,在對null值根據時間降序排列 總結關鍵點在於if is...

MySQL Order By索引優化

mysql order by索引優化 mysql可以直接使用索引來滿足乙個order by 子句而無需做額外的排序。儘管 order by 不是和索引的順序準確匹配,索引還是可以被用到。在一些情況下,mysql可以直接使用索引來滿足乙個 order by 或 group by 子句而無需做額外的排序...