国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL ORDER BY排序語句用法與優化

2024-07-24 12:38:27
字體:
來源:轉載
供稿:網友

在mysql中ORDER BY keyword是用來給記錄中的數據進行分類的,下面我來總結了order by語句利用索引進行優化的方法。

MySQL Order By語法:SELECT column_name(s) FROM table_name ORDER BY column_name

注意:SQL語句是“字母大小寫不敏感”的語句,它不區分字母的大小寫,即:“ORDER BY”和“order by”是一樣的.

MySQL Order By案例

下面的例子,從“Person”表中選取所有記錄,并將“Age”列進行分類,代碼如下:

  1. <?php 
  2. $con = mysql_connect("localhost","peter","abc123");  
  3. if (!$con)  
  4.   {  
  5.   die('Could not connect: ' . mysql_error());  
  6.   }  
  7. mysql_select_db("my_db"$con);  
  8. $result = mysql_query("SELECT * FROM person ORDER BY age");  
  9. while($row = mysql_fetch_array($result))  
  10.   {   //Vevb.com 
  11.   echo $row['FirstName']  
  12.   echo " " . $row['LastName'];  
  13.   echo " " . $row['Age'];  
  14.   echo "<br />";  
  15.   }  
  16. mysql_close($con);  
  17. ?> 

上面的代碼將輸出下面的結果:

Glenn Quagmire 33

Peter Griffin 35

按照升序或者降序進行分類排列,如果你使用了“ORDER BY”關鍵詞,所有記錄將按照默認的升序進行排列,即,從1到9,從a到z.

使用“DESC”關鍵詞可以制定所有的數據按照降序排列(即,從9到1,從z到a),雙擊代碼全選 123 SELECT column_name(s) FROM table_name ORDER BY column_name DESC.

MySQL Order By根據兩列進行分類

很多時候,我們需要同時根據兩列內容,或者更多列,來對數據進行分類,當指定的列數多于一列時,僅在第一列的值完全相同時才參考第二列.

雙擊代碼全選 123 SELECT column_name(s) FROM table_name ORDER BY column_name1, column_name2

通過索引優化來實現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;

特別提示:

>mysql一次查詢只能使用一個索引,如果要對多個字段使用索引,建立復合索引。

>越小的數據類型通常更好,越小的數據類型通常在磁盤、內存和CPU緩存中都需要更少的空間,處理起來更快。 

>簡單的數據類型更好,整型數據比起字符,處理開銷更小,因為字符串的比較更復雜。在MySQL中,應該用內置的日期和時間數據類型,而不是用字符串來存儲時間;以及用整型數據類型存儲IP地址。 

>盡量避免NULL:應該指定列為NOT NULL,除非你想存儲NULL。在MySQL中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計信息以及比較運算更加復雜。你應該用0、一個特殊的值或者一個空串代替空值。

>在ORDER BY操作中,MySQL只有在排序條件不是一個查詢條件表達式的情況下才使用索引。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝应县| 文水县| 巩留县| 独山县| 巴林左旗| 嘉兴市| 乌什县| 万源市| 大兴区| 公主岭市| 永胜县| 治多县| 阳原县| 高雄县| 西畴县| 揭阳市| 原阳县| 米易县| 西吉县| 大兴区| 汝南县| 新晃| 绥滨县| 岚皋县| 崇阳县| 于田县| 大洼县| 长白| 深水埗区| 宁河县| 巴楚县| 保康县| 英德市| 鄂托克前旗| 红原县| 鄂托克前旗| 会东县| 郴州市| 华坪县| 扬州市| 霍林郭勒市|