sqlserver 多表關(guān)聯(lián)時(shí)在where語(yǔ)句中慎用trim()方法
更新時(shí)間:2009年09月12日 22:12:56 作者:
最近做的一個(gè)項(xiàng)目由于前期數(shù)據(jù)庫(kù)設(shè)計(jì)不合理,導(dǎo)致多表關(guān)聯(lián)的主外鍵長(zhǎng)度設(shè)計(jì)不一致,以致過(guò)長(zhǎng)主外鍵中過(guò)長(zhǎng)的字段在填入相同字段時(shí),多余部分被填入空字符。迫于無(wú)奈,就在多表關(guān)聯(lián)的where語(yǔ)句中使用了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多條記錄)關(guān)聯(lián)附表B(4萬(wàn)多條記錄)時(shí)用了1秒鐘時(shí)間,該值在不同機(jī)器執(zhí)行可能有所差異,但比不加trim速度稍微慢一些,但是不是特別明顯。
其sql語(yǔ)句類似如下:
select A.key,B.key from A,B where trim(A.key)=trim(B.fk)
但是,在上面sql語(yǔ)句中加入第三個(gè)表C(兩條記錄)后,Sql語(yǔ)句如下:
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)
整個(gè)sql語(yǔ)句執(zhí)行了差不多70多秒鐘。比不加trim()方法多發(fā)費(fèi)了60奪秒。
后來(lái),通過(guò)若干實(shí)驗(yàn)發(fā)現(xiàn)這種where中多表關(guān)聯(lián)條件,如果不在左邊關(guān)聯(lián)條件處加trim()方法即可達(dá)到基本等同于一般多表關(guān)聯(lián)的效率。
改良后的sql語(yǔ)句如下:
select A.key,B.key,C.key from A,B,C where A.key=trim(B.fk) and A.col=trim(C.pk)
此條sql語(yǔ)句執(zhí)行效率基本等同于where語(yǔ)句中無(wú)trim()的sql語(yǔ)句速度了。
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多條記錄)關(guān)聯(lián)附表B(4萬(wàn)多條記錄)時(shí)用了1秒鐘時(shí)間,該值在不同機(jī)器執(zhí)行可能有所差異,但比不加trim速度稍微慢一些,但是不是特別明顯。
其sql語(yǔ)句類似如下:
select A.key,B.key from A,B where trim(A.key)=trim(B.fk)
但是,在上面sql語(yǔ)句中加入第三個(gè)表C(兩條記錄)后,Sql語(yǔ)句如下:
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)
整個(gè)sql語(yǔ)句執(zhí)行了差不多70多秒鐘。比不加trim()方法多發(fā)費(fèi)了60奪秒。
后來(lái),通過(guò)若干實(shí)驗(yàn)發(fā)現(xiàn)這種where中多表關(guān)聯(lián)條件,如果不在左邊關(guān)聯(lián)條件處加trim()方法即可達(dá)到基本等同于一般多表關(guān)聯(lián)的效率。
改良后的sql語(yǔ)句如下:
select A.key,B.key,C.key from A,B,C where A.key=trim(B.fk) and A.col=trim(C.pk)
此條sql語(yǔ)句執(zhí)行效率基本等同于where語(yǔ)句中無(wú)trim()的sql語(yǔ)句速度了。
相關(guān)文章
SQL Server Alwayson添加監(jiān)聽器失敗的解決方法
這篇文章主要為大家詳細(xì)介紹了SQL Server Alwayson添加監(jiān)聽器失敗的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Linux安裝ODBC連接SQLServer數(shù)據(jù)庫(kù)的步驟
這篇文章主要介紹了Linux安裝ODBC連接SQLServer數(shù)據(jù)庫(kù)?,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04sql 判斷函數(shù)、存儲(chǔ)過(guò)程是否存在的代碼整理
本文主要為大家介紹了sql下用來(lái)判斷各種資源是否存在的代碼,希望對(duì)大家學(xué)習(xí)sql的函數(shù)及數(shù)據(jù)庫(kù)能夠有所幫助2014-07-07SQL?Server數(shù)據(jù)庫(kù)生成與執(zhí)行SQL腳本詳細(xì)教程
為了方便可以把需要連續(xù)執(zhí)行的SQL語(yǔ)句寫到一個(gè)文本文件中,并且用.SQL作為擴(kuò)展名,這種文件叫做SQL腳本文件,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫(kù)生成與執(zhí)行SQL腳本的相關(guān)資料,需要的朋友可以參考下2023-01-01mssql 30萬(wàn)條數(shù)據(jù) 搜索文本字段的各種方式對(duì)比
30萬(wàn)條,有ID列但無(wú)主鍵,在要搜索的“分類”字段上建有非聚集索引2010-04-04SQL?Server數(shù)據(jù)庫(kù)之表的高級(jí)查詢
這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫(kù)之表的高級(jí)查詢的相關(guān)資料,高級(jí)查詢?cè)跀?shù)據(jù)庫(kù)中用得是最頻繁的,也是應(yīng)用最廣泛的,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08