1. 程式人生 > >添加了一個欄位,查詢速度突然變慢

添加了一個欄位,查詢速度突然變慢

幾年前寫的一個小總結,本來寫在公司的wiki上,現在讀起來感覺寫的挺好玩的,粘到這裡。

 

做一個需求,要給平臺數據表加個欄位。加欄位之後,觸發程式,通過DbVisualizer查詢,資料正確入庫,然後通過頁面訪問該表,提示連線超時!!!WTF!剛才通過頁面訪問的時候還好好的啊!!

 

第一,懷疑網路問題。點別的頁面,迅速查出結果,不是這個問題。

 

第二,懷疑加欄位對資料庫造成影響。但是從來沒有聽說過加個欄位會影響查詢速度啊!!但,還是要勇敢的嘗試一下。找到銀行清算表,新增一個欄位,查詢銀行清算表,速度也很慢!!呃,被我玩壞了?但是,因為加一個欄位影響查詢速度這件事情太匪夷所思了吧!

 

第三,懷疑程式碼被改壞了。然而,壓根就木有改過程式碼啊!看來問題還是出在資料庫上......

第四,瞎嘗試,刪除銀行表裡的資料,刪到就剩200條,然鵝,還是超時......經過頻繁的測試發現,查詢的結果集越少,速度越快......資料逐漸增多,會越來越慢,直到超時。從程式碼中拿出該SQL,在DbVisualizer中執行,秒出結果!!呃,為什麼呢!為什麼這麼快呢!!仔細觀察SQL,其中除了銀行表還要連線其他兩張表,表A資料量200條,表B資料量100萬條,連線方式是left join。然後去掉A、B表,頁面秒出。加上A表,頁面秒出。加上B表,超時了......。難道,難道是索引不夠???但是為什麼DbVisualizer中執行的辣麼的快啊,如果是索引問題,不應該查詢的也很慢嗎?然後......嘗試的加上了關聯欄位的索引,呃,問題解決了......好無語啊,也好開心啊......

 

總結:A:DbVisualizer應該會對SQL進行優化!所以不要相信它的執行結果!

           B:引起問題的不是加欄位,而是B表資料量增加到了一定的量級,然後導致的查詢速度突然變的很慢!