在規劃mysql資料庫時,一定要記得替欄位添加索引,雖然添加索引很容易但千萬不要小看它的神奇威力!!

索引究竟有什麼樣的效果,就讓Aidec來說說自己忘記加索引的慘痛經歷吧~


就在某天,收到一封來自客戶的訊息,內容是說他們的訂單查詢速度非常的慢,希望我能夠幫他們解決這個問題

大家都知道客戶是上帝這個道理,我二話不說的放下手邊的工作,開啟了客戶的網站測試究竟是有多慢...

打開網站進入後台查詢訂單,結果一瞬間就出來了,心理的OS:客戶在整我嗎?這樣的速度還不滿意。

認真的我,努力的在網站上左看看右看看,眼睛停留在了搜尋條件上,原來預設只有搜尋當天的訂單哦,那搜尋範圍改廣一點試看看好了

於是我將搜尋條件改成一個月內的訂單,點下搜尋後,不得了的事情出現了~~ loading 的動畫 不斷地不斷地轉....

過了一分多鐘總算讀取完畢,終於體會到為何客戶會說查詢速度很慢了...連我也受不了!

看了一下訂單數量,什麼 ! 才約7000筆訂單怎麼會如此慢呢? 想當初曾在某個專案測試查詢一千多萬筆也是1~2秒就出來了

為了揪出幕後元兇,只好默默的打開專案面對那塵封以久的原始碼(好像也沒多久...),快速的掃過猜測元凶應該是一段用來計算分頁數量的SQL上

複製SQL單獨執行,果然元兇就是它(如圖)竟然執行了43.8秒

mysql-index-1.png

看了一下查詢結果才6327筆,怎麼會這麼慢呢? 後來想到問題應該是出在 join 的部分,簡單的拿掉所有 join 又測試了一次 瞬間就查詢完畢了

思索了一下...該不會是因為我忘了加索引的原因? 很快的便檢查了一下,的確我忘了加索引。於是快速地替order_info這張表的o_id加了索引並再測試了一次查詢

結果WTF?

 mysql-index-2.png

竟然只要42.5ms,不過是加了個索引也差太多了吧! 光看數字可能感受不出來差別有多大,就讓萬能的google替我們算一下差了多少倍

mysql-index-3.png

足足差了1030倍啊~~


所以這個故事告訴我們,千萬要記得加索引


文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)

原文連結:
https://blog.aidec.tw/post/mysql-index