程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sqlserver 多表關聯時在where語句中慎用trim()方法

sqlserver 多表關聯時在where語句中慎用trim()方法

編輯:關於SqlServer

最近做的一個項目由於前期數據庫設計不合理,導致多表關聯的主外鍵長度設計不一致,以致過長主外鍵中過長的字段在填入相同字段時,多余部分被填入空字符。迫於無奈,就在多表關聯的where語句中使用了trim()方法。

類似如下:
select A.key,B.key,C.key from A,B,C where trim(A.key)=trim(B.fk) and trim(A.col)=trim(C.pk)。
在主表A(200多條記錄)關聯附表B(4萬多條記錄)時用了1秒鐘時間,該值在不同機器執行可能有所差異,但比不加trim速度稍微慢一些,但是不是特別明顯。
其sql語句類似如下:
select A.key,B.key from A,B where trim(A.key)=trim(B.fk)
但是,在上面sql語句中加入第三個表C(兩條記錄)後,Sql語句如下:
select A.key,B.key,C.key from A,B,C where trim(A.key)=trim(B.fk) and trim(A.col)=trim(C.pk)
整個sql語句執行了差不多70多秒鐘。比不加trim()方法多發費了60奪秒。
後來,通過若干實驗發現這種where中多表關聯條件,如果不在左邊關聯條件處加trim()方法即可達到基本等同於一般多表關聯的效率。
改良後的sql語句如下:
select A.key,B.key,C.key from A,B,C where A.key=trim(B.fk) and A.col=trim(C.pk)
此條sql語句執行效率基本等同於where語句中無trim()的sql語句速度了。

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