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 子句而無需做額外的排序...