[SQL ] 請問這樣的語法能再改成有效率的嗎?

看板Database作者 (阿風~~)時間10年前 (2013/09/29 00:18), 編輯推噓0(0013)
留言13則, 5人參與, 最新討論串1/1
各位大大好:因為我用linked server的方式將二個資料庫連結, 這樣語法就能結何成一起用,並且我用了檢示表的方式來作,結果 發生了二台不同的機器,效能差很多,a機器2秒,b機器要1分鐘 不過想先請教各位,我的語法能再調整嗎? vc <---檢示表名 Select a.學期, a.學號, a.課程代碼, a.課程班級, b.老師編號, b.老師姓名 From 學生選修表 as a Inner Join 教師教授表 as b on a.課程代碼 = b.課程代碼 And a.課程班級 = b.課程班級 And a.學期 = b.學期 Inner Join 課程名稱表 as c on a.課程代碼 = c.課程代碼 Where (a.課程代碼 like '%900%') and (c.課程名稱 like '%國語文%') //////以下有結合上面的檢示表 vt <----檢示表名 SELECT sd.學號 AS std_no, sd.學期 AS smtr, sd.老師編號, sb.學生姓名, (SELECT CASE WHEN SUM(sm.修課時數) IS NULL THEN 0 ELSE SUM(sm.修課時數 ) END AS Expr1 FROM 修課記錄 AS sm WHERE (學號 = sd.學號) AND (學期 = sd.學期) AND (導師認可 = 1) AND (主 任認可 = 1)) AS hr, (SELECT cOUNT(學號) AS Expr1 FROM 修課記錄 AS sm WHERE (學號 = sd.學號) AND (學期 = sd.學期) AND (導師認可 = 1) AND (主任認可 = 1)) AS stdcount FROM VC AS sd LEFT OUTER JOIN 學生資料表 AS sb ON sd.學號 = sb.學號 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.121.234

09/29 10:02, , 1F
a機器是啥 b機器是啥 如果是2台client的話你找錯重點了
09/29 10:02, 1F

09/29 12:41, , 2F
你誤會我的意思,我也想看看我這語法能不能有改進的地
09/29 12:41, 2F

09/30 08:15, , 3F
要了解T-SQL語法撰寫的perfomance問題,請先了解SARG
09/30 08:15, 3F

09/30 08:15, , 4F
第一段語法的問題是使用 LIKE
09/30 08:15, 4F

09/30 08:15, , 5F
第二段語法的問題在於子查詢
09/30 08:15, 5F

09/30 08:16, , 6F
另外你提供的語法,看不出哪裡使用 Link Server ^^??
09/30 08:16, 6F

09/30 20:21, , 7F
千萬別用linked server來join,請先用openquery來做
09/30 20:21, 7F

10/01 03:23, , 8F
元PO是說相同資料庫結構的機器跑同樣這個Query
10/01 03:23, 8F

10/01 03:24, , 9F
結果跑出來速度差異很大 沒說到linked server啊XDD
10/01 03:24, 9F

10/01 03:26, , 10F
恩... 好像有理解錯誤OTZ
10/01 03:26, 10F

10/01 03:27, , 11F
不過感覺那2s 1min的描述確實是我想的那樣OAO!?
10/01 03:27, 11F

10/01 22:44, , 12F
因為linked後可以直接使用,所以我就沒特別加了
10/01 22:44, 12F

10/01 22:44, , 13F
請問您想的是怎樣呢?
10/01 22:44, 13F
文章代碼(AID): #1IHm5hVK (Database)