同樣功能的SQL語句,寫成參數和寫成常量怎麼效率會有那麼大的差別

來源:互聯網
上載者:User
今天寫一個預存程序,由於執行的時間比較長(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'
select ACC_SEGMENT
from dbo.mis_gl_balance
where LEFT(ACC_SEGMENT,22) IN (SELECT    @mis_company_code+'.105301.'+mis_code
FROM         finance_budget_account
WHERE     (budget_type = '電路租費'))

比較這兩段SQL.我們只是將其中的一個字串'3810'寫成了參數的形式,但是執行的效率就完全不一樣了.
第二種SQL語句花費了7秒鐘的時間.
為什麼同樣的SQL語句,執行效率相差那麼大拉? 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.