今天協助同事處理SQL查詢速度太慢的問題,原來的語法是:
Select * from Table_A LeftJoin OpenQuery(Another_DB_Server,'Select * from DB.dbo.Table_B') as Table_B on
(Table_A.Col_1=Tbale_B.Col_1 AND
Table_B.Col_4='D')
Where Table_A.YYMM='201005'
其中Table_A資料筆數約15萬筆,Table_B資料筆數約20萬筆,這個查詢查下去要花56秒,我看了以後直覺就是兩個大Table Join不慢才有鬼,所以我第一件事就是先減少遠端查詢的資料筆數,也就是在OpenQuery那行SQL指令作手腳,原本是:
Select * from DB.dbo.Table_B
改成:
Select * from DB.dbo.Table_B Where Col_4='D'
可是問題來了,在OpenQuery中的這段SQL指令是一個字串,前後都要用單引號包著,快兩年沒用SQL了,字串中的單引號要如何表示早就忘了,找一本SQL指令的書看半天都找不到,只好拜Google大神,一下就找到答案了,就是用兩個單引號表示,將原本的SQL指令改為:
Select * from Table_A LeftJoin OpenQuery(Another_DB_Server,'Select * from DB.dbo.Table_B Where Col_4=''D''') as Table_B on
(Table_A.Col_1=Tbale_B.Col_1)
眼花了吼!
'Select * from DB.dbo.Table_B Where Col_4=''D'''
[單引號]Select * from DB.dbo.Table_B Where Col_4=[單引號][單引號]D[單引號][單引號][單引號]