2013年12月17日 星期二

SQL語法優化微調 - MAX()、Min()之使用

今天檢視程式內的SQL語法時看到一條SQL指令 可以使用更快的方式取得結果 情況︰ 需要取得某資料表中某欄位的最大值或者最小值 通常這個欄位大都是用在列清單時的排列順序 最常見的作法
--MSSQL
    SELCT TOP 1 orderid FROM table WHERE (ID=XX) ORDER BY orderid (ASC | DESC)    
--MYSQL
    SELCT `orderid` FROM `table` WHERE (`ID` = XX) ORDER BY orderid (ASC | DESC) LIMIT 1
這樣的問題看起來沒問題 如果在大資料量的資料表中執行這樣的語法會在效能上產生問題 原因在於,資料庫取得資料後需要再經過ORDER BY的排序 如果表中存有幾十萬筆資料 取得資料後再排序 效能的損耗是可想而知 如何調節優化呢 很簡單 MSSQL及MYSQL都有提供MAX()及MIN() 在回傳的結果資料集中取得最大值和最小值 相關的解釋可以直接上微軟的MSDN或者MySQL的線上文件觀看 修改後的語法
--MSSQL
    SELCT max(orderid),min(orderid)  FROM table WHERE (ID=XX) 
--MYSQL
    SELCT max(`orderid`),min(`orderid`) FROM `table` WHERE (`ID` = XX) 
還可以一舉取回最大值及最小值 如果你是使用最上面的方式來寫SQL語法 趕快修正吧

沒有留言: