今天檢視程式內的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語法
趕快修正吧
沒有留言:
張貼留言