3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
[加快SQL 搜尋] SQL查詢時 當資料量過大的時候,如果直接下ORDER BY 系統會跑很慢,該如何改善呢? [GOOGLE:SQL 查詢 慢] 資料來源:http://expect7.pixnet.net/blog/post/42409147 在MySQL 中一般我門直接下搜尋,通常都是直接下 SELECT * FROM table WHERE colnumA=”條件” ORDER BY  colnumA。 這樣的搜尋在少量的資料是沒有任何問題,但是當你全部的資料有有兩百萬筆去搜尋的時候,你會發現資料跑得很慢。 當你下ORDER BY的時候,資料庫會把全部兩百萬筆先做排序。排序完成之後,再來比對是否有你要的資料。在列出你要的資料。 查詢資料並不慢,但是會慢的重點在於排序,就可能占了70%的時間。 但是跟同事討論,也拿公司系統資料來做測試,有了以下的結論。 SELECT * FROM table WHERE colnumA=”條件” ORDER BY colnumA 單純直接查詢,大約花了18s。但是改用另一個方法。 SELECT A.* FROM (SELECT * FROM  table WHERE colnumA=”條件”….多個條件 ) AS A ORDER BY A.colnumA 就是先把結果查詢出來,可能查到的資料剩下1萬筆。那這樣的速度會比原來的速度快。 但是還有另一種方法,很奇妙,速度更快。 SELECT  * FROM (SELECT * FROM table WHERE 1) AS T INNER JOIN (SELECT 主鍵 FROM  table WHERE colnumA=”條件” ……) AS S ON T.主鍵=S.主鍵 ORDER BY  T.colnumA 用INNER JOIN 就感覺上,他做了總共做了三次搜尋,應該是更慢才對,可是我會說他很妙是因為,實測之後,他的速度是最快的。   在資料量龐大約200萬筆,下相同的條件查詢。 SELECT * FROM table WHERE colnumA=”條件”…多個條件 ORDER BY colnumA    花費時間平均19 s SELECT A.* FROM (SELECT * FROM table WHERE colnumA=”條件”….多個條件 ) AS A ORDER BY A.colnumA 花費時間平均 8s SELECT * FROM (SELECT * FROM table WHERE 1) AS T INNER JOIN (SELECT 主鍵 FROM table WHERE colnumA=”條件” ……) AS S ON T.主鍵=S.主鍵 ORDER BY T.colnumA  花費時間平均 7.5s   當然這不是唯一解!但是卻是可以參考的資料!        

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦