在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

 

當然這不是唯一解!但是卻是可以參考的資料!

 

 

 

 

 

 

arrow
arrow
    全站熱搜

    阿基 發表在 痞客邦 留言(0) 人氣()