程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 同樣功能的SQL語句 寫成參數和寫成常量的差別

同樣功能的SQL語句 寫成參數和寫成常量的差別

編輯:關於SqlServer

今天寫一個存儲過程,由於執行的時間比較長(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語句,執行效率相差那麼大拉? 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved