『壹』 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 欄位排序
select *
from sellrecord
order by convert(int,substring(listnumber,1,2)) asc,convert (int,substring(listnumber,4,len(listnumber)-2)) asc
『叄』 mysql 增加排序 性能差很多 怎麼優化
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;
『肆』 sql in怎麼根據in的順序排列查詢結果
按指定順序輸出數據,可以使用order by charindex(','+convert(varchar,ID)+',',',3,1,2,5,4,')的方法來實現這個目的
1
2
3
4
select id,title
from tbname
where id in (3,1,2,5,4)
order by charindex(','+convert(varchar,ID)+',',',3,1,2,5,4,')
『伍』 mysql語句既要從大到小排列,又要隨機獲取怎麼做的有誰遇到過嗎
sql語句:select * from table_name where id=round(rand()*10) order by id desc limit 0,6
註:可以根據你id值的范圍調節where條件中隨機數值的范圍。
這是最簡單的方式,不過這個方法可能存在一個問題,就是產生的隨機數可能重復,比如隨機數出現2次或多次數字3,這樣結果中就會有重復的記錄。通過sql語句本身如何解決這個問題暫時沒想到,這樣就只能用另一種方法:先在程序中生成6個不重復的隨機數(具體操作比如每個隨機數生成出來保存之前先跟之前的所有數比較一下,不重復才保存,重復就重新生成一個),然後再生成sql語句:select * from table_name where id in (1,2,3,4,5,6) order by id desc ;
『陸』 mysql資料庫怎麼可以兩個條件排序
可以的,order by多個欄位規則是這樣的,用逗號分隔每一個欄位,如果欄位不指明排序方式,默認是增序。排序的方法是先按第一個欄位排序,如果有相同的再按後續的欄位依次排序。
舉個例子
『柒』 mysql如何實現對group by後的條目進行排序
group by 和 order by 不能同時使用 我沒有看你的sql寫的對不對 在你的基礎上稍加修改 :
select * from (
select name,count(distinct name) as number from useTable group by name
) as tmp order by number desc
『捌』 mysql 查詢結果按照字母排序
資料庫排序只能按字典序來排序,漢字不能用字典序排序。
你可以加個欄位存拼音或者加個欄位存一個int(代表次序)
『玖』 mysql怎麼按 in 裡面 id 的順序排列
表結構如下:
mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
+----+-------+
執行以下SQL:
mysql> select * from test where id in(3,1,5);
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 3 | test3 |
| 5 | test5 |
+----+-------+
3 rows in set (0.00 sec)
這個select在mysql中得結果會自動按照id升序排列,
但是我想執行"select * from test where id in(3,1,5);"的結果按照in中得條件排序,即:3,1,5,
想得到的結果如下:
id name
3 test3
1 test1
5 test5
請問在這樣的SQL在Mysql中怎麼寫?
網上查到sqlserver中可以用order by charindex解決,但是沒看到Mysql怎麼解決??請高手幫忙,謝
謝!
select * from a order by substring_index('3,1,2',id,1);
『拾』 mysql默認排序問題
參考mysql官方的回答:
當你的表示myisam時:
SELECT * FROM tbl -- this will do a "table scan". If the table has never had any DELETEs/REPLACEs/UPDATEs, the records will happen to be in the insertion order, hence what you observed.
大致意思為,一個myisam引擎表在沒有任何的刪除,修改操作下,執行 select 不帶order by,那麼會按照插入順序進行排序。
If you had done the same statement with an InnoDB table, they would have been delivered in PRIMARY KEY order, not INSERT order. Again, this is an artifact of the underlying implementation, not something to depend on.
對於innodb引擎表來說,在相同的情況下,select 不帶order by,會根據主鍵來排序,從小到大