如題
我在幫人家看一個問題,他說他跑一支T-SQL腳本跑得很慢,超級無敵慢
我看了一下,裡面的內容有一段大概是長這樣
其目的是在一個指標(Cursor)的迴圈裡,依當下的條件檢測某個資料表中是否可以撈到資料,如果可以,就把旗標設為一個特定值
※為簡略表示,Cursor的部分就單純用while迴圈跑1萬次表示.
While (@i < 10000)
begin
select * from tableA
IF @@ROWCOUNT > 0
select @flg = 'A'
select * from tableB
IF @@ROWCOUNT > 0
select @flg = 'B'
select * from tableB
IF @@ROWCOUNT > 0
select @flg = 'B'
select @i = @i + 1
end
都是用select之後,再去檢查有沒有資料.
以上這段是資歷10幾年的IT人員寫的......
以我這菜鳥來看,應該是要這樣寫才對吧?
DECLARE @tmpRowCount int
While (@i < 10000)
begin
select @tmpRowCount=count(field1) from tableA
IF @tmpRowCount > 0
select @flg = 'A'
select @tmpRowCount=count(field1) from tableB
IF @tmpRowCount > 0
select @flg = 'B'
select @tmpRowCount=count(field1) from tableC
IF @tmpRowCount > 0
select @flg = 'C'
select @i = @i + 1
end
各位先進怎麼看呢?
只要是減少資源上的浪費上,該思考的是如何減少操作的次數,
光是把select寫在迴圈內,就應該試著簡化是否能一次性達到目的,
而不是讓它隨著迴圈執行處理的次數