批查詢與存儲過程的差異

     今天報關人員問我關於短溢表爲何查詢不出來的問題,苦惱了我一下午。

    一個叫[BSERP_GAT_REPORT_GAT04007]  的存儲過程死活都查詢不出來數據,我整整查詢了10分鐘,最終還是沒出來數據。這讓我很苦惱。我試着猜測到底是哪一個語句的問題,一步一步的查詢每一個語句到底是出了什麼問題?每一步消耗的時間並不長。但我整個過程一起執行時卻發現查詢慢的要死。

     我懷疑是否是剛剛將SQL2000遷移到2005引起的問題,我將之前的嵌套表更改爲公用表達式。但發現還是同樣的問題,之後我把所有的語句放在一個批查詢中執行,發現只要15秒數據就查詢出來了,這讓我有點驚喜。我將此段代碼放入到過程中,再執行,發現又不動了,時間過了3分鐘,依然無數據。

    奇怪了!我試着執行其他數據庫相同的過程,發現挺快的,但爲何這個過程卻如此之慢呢?

我將查詢慢的方向轉移到了數據量的問題,經查詢有一個表GATSAA的數據有120萬,相對SQL2005似乎是大了點,我試着將數據移入到一個備份表中GATSAABAK08011003中,再執行此過程時,只用了7秒數據竟出來了。

     總結:

          SQL SERVER在處理大數據量時的能力還是有欠缺的,也許本人不才,語句寫的也不怎麼好!

          大數據量的查詢時,在過程中的查詢明顯比不在過程的查詢快,這也讓我對曾經看到的一句話產生的懷疑。

         “存儲過程可以提高性能”

若各位朋友有不同的意見請拍磚!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章