① MYsql如何降序排列或如何加快降序查詢的速度
MySQL索引通常是被用於提高WHERE條件的數據行匹配或者執行聯結操作時匹配其它表的數據行的搜索速度。
MySQL也能利用索引來快速地執行ORDER BY和GROUP BY語句的排序和分組操作。
通過索引優化來實現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;
特別提示:
1>mysql一次查詢只能使用一個索引。如果要對多個欄位使用索引,建立復合索引。
2>在ORDER BY操作中,MySQL只有在排序條件不是一個查詢條件表達式的情況下才使用索引。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ryb7899/archive/2010/05/11/5580624.aspx
② MySql的幾種排序方式
1、單列排序
SELECT * FROM test1 ORDER BY date_time
默認升序,降序後面接"DESC"即可。
2、多列排序
SELECT * FROM test1 ORDER BY `status`, date_time DESC
首先按`status`欄位排序,若`status`相等,則按data_time排序。
3、自定義排序
SELECT * FROM test1 ORDER BY FIELD(`status`, 3, 2, 4, 1, 5), date_time DESC
使用"FIELD()"函數,可指定順序。
4、其他條件排序
先按大於等於當前時間升序,再按小於當前時間降序,支持分頁。
SELECT * FROM test1 ORDER BY date_time < NOW(), IF(date_time < NOW(), 0, date_time), date_time DESC
附加SQL腳本:
CREATETABLE`test1`(
`id`bigint(20)NOTNULLAUTO_INCREMENT,
`name`varchar(50)NOTNULL,
`date_time`datetimeNOTNULL,
`status`int(5)NOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8
INSERTINTO`test1`VALUES
(NULL,'測試1','2018-03-0511:09:00',1),(NULL,'測試2','2018-03-0611:09:00',1),(NULL,'abc','2018-03-0711:09:00',1),
(NULL,'def','2018-04-0811:09:00',2),(NULL,'李某某','2018-04-1711:09:00',1),(NULL,'飯某某','2018-04-2013:09:00',2),
(NULL,'趙','2018-04-2001:09:00',4),(NULL,'倩','2018-04-2811:09:00',2),(NULL,'andy','2018-04-3011:09:00',1),
(NULL,'tony','2018-05-0811:09:00',4),(NULL,'tom','2018-05-0711:09:00',3),(NULL,'bill','2018-05-1811:09:00',3),
(NULL,'james','2018-06-0711:09:00',4),(NULL,'anthony','2018-06-1811:09:00',2),(NULL,'蓋茨','2018-04-2111:09:00',1),
(NULL,'部長','2018-04-2411:09:00',4),(NULL,'李總','2018-04-2011:09:00',5),(NULL,'張總','2018-04-2911:09:00',2),
(NULL,'王總','2018-04-1911:09:00',3),(NULL,'唐總','2018-05-0111:09:00',2);
參考的這篇文檔Mysql排序方式
③ mysql資料庫,排序的語句
具體如下:
1、第一步,創建一個測試表,代碼如下,見下圖,轉到下面的步驟。
④ mysql中同時一個升序一個降序怎麼寫大家
1、創建測試表,
create table test_order(id number, value1 number, value2 number);
⑤ 查詢每個專業名和男生學生人數,並按照男生人數降序排序Mysql
不知道你的表結構可以這樣
假設 表名為students
專業名 欄位為name
gener 代表性別 男生為1
sql語句如下
select name,count(if(genre =1,Id,null)) as man_count from students group name order by man_count desc
希望可以幫到你
⑥ mysql資料庫:按某列的值的出現次數降序排列怎麼寫SQL語句注意,是按出現次數排序哈
select a,count(1) cnt from table group by a order by cnt desc
⑦ 在MYSQL中怎麼寫SQL語句,能取到表中按ID降序排列的前五條記錄
我們知道從 MySQL 表中使用 SQL SELECT 語句來讀取數據。
如果我們需要對讀取的數據進行排序,我們就可以使用 MySQL 的 ORDER BY 子句來設定你想按哪個欄位哪種方式來進行排序,再返回搜索結果。
具體語法參考:
以下是 SQL SELECT 語句使用 ORDER BY 子句將查詢數據排序後再返回數據:
from 樹懶學堂 - 一站式數據知識平台
你可以使用任何欄位來作為排序的條件,從而返回排序後的查詢結果。
你可以設定多個欄位來排序。
你可以使用 ASC 或 DESC 關鍵字來設置查詢結果是按升序或降序排列。 默認情況下,它是按升序排列。
你可以添加 WHERE…LIKE 子句來設置條件。
所以,樓主所問的問題答案應該為:select ... from ... order by ID desc limit(0,5)