程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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 ,所以寫了如下這樣的代碼:

  selectACC_SEGMENT
  fromdbo.mis_gl_balance
  whereLEFT(ACC_SEGMENT,22)IN(SELECT'3810.105301.'+mis_code
  FROM    finance_budget_account
  WHERE  budget_type='電路租費')

  以上SQL語句就是把某種電路租費的ACC_SEGMENT全部取出來了.執行效率還能夠接收,1秒鐘就完成了.

  但是如果改成了如下的代碼:

  DECLARE@mis_company_codechar(4)
  SET@mis_company_code='3810'
  selectACC_SEGMENT
  fromdbo.mis_gl_balance
  whereLEFT(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