今天寫一個存儲過程,由于執行的時間比較長(7秒)是以打算優化一下.結果在優化測試代碼中發現如下一個奇怪的現象.
現在有一個表mis_gl_balance,其中有一個字段ACC_SEGMENT VARCHAR(181) NULL ,他的内容的形式如下:
3810.105301.5414070180.000000.00000000.0000.000000
另外一個表finance_budget_account 主要記錄了budget_type 預算類型和mis_code MIS系統編碼.這裡的MIS編碼就是ACC_SEGMENT表中的第三段.
為了查詢出某種預算類型的所有ACC_SEGMENT ,是以寫了如下這樣的代碼:

select ACC_SEGMENT

from dbo.mis_gl_balance

where LEFT(ACC_SEGMENT,22) IN (SELECT '3810.105301.'+mis_code

FROM finance_budget_account

WHERE budget_type = '電路租費')
以上SQL語句就是把某種電路租費的ACC_SEGMENT全部取出來了.執行效率還能夠接收,1秒鐘就完成了.
但是如果改成了如下的代碼:

DECLARE @mis_company_code char(4)

SET @mis_company_code='3810'



where LEFT(ACC_SEGMENT,22) IN (SELECT @mis_company_code+'.105301.'+mis_code


WHERE (budget_type = '電路租費'))
比較這兩段SQL.我們隻是将其中的一個字元串'3810'寫成了參數的形式,但是執行的效率就完全不一樣了.
第二種SQL語句花費了7秒鐘的時間.
為什麼同樣的SQL語句,執行效率相差那麼大拉?
本文轉自深藍居部落格園部落格,原文連結:http://www.cnblogs.com/studyzy/archive/2007/08/31/877523.html,如需轉載請自行聯系原作者