如何在sql server 2008中優化下面的查詢。 特殊選擇需要優化的查詢(例如,DB = 10000中的totoal記錄,以及如果consume_flag ='flase 「在9999行其抽空多的時間來檢索單個記錄)如何優化SQL Server 2008中的DML操作
DECLARE @proxyAcctToken nvarchar(50)
DECLARE @pmtAcctToken varchar(50)
DECLARE @ErrorCode varchar(50)
DECLARE @returnMessage varchar(1000)
DECLARE @ErrorStep varchar(100)
DECLARE @tokenSeqNo int
DECLARE @count int
SELECT @count=100000
WHILE(@count>0)
BEGIN
SELECT @ErrorCode = @@ERROR
BEGIN TRY
SELECT top 1 @tokenSeqNo=S_NO,@pmtAcctToken = PMT_ACCT_TOKEN, @proxyAcctToken=PROXY_PMT_TOKEN
FROM PCTransDB.dbo.MIG_TOKEN_DUMP WHERE CONSUMED_FLAG = 'false'
UPDATE PCTransDB.dbo.MIG_TOKEN_DUMP SET CONSUMED_FLAG = 'TRUE', CONSUMED_BY = 'MIGBATCH' WHERE S_NO = @tokenSeqNo
PRINT @count
SELECT @ErrorCode = 0
/*************************************
* Return from the Stored Procedure
*************************************/
END TRY
BEGIN CATCH
PRINT 'IN CATCH BLOCK'
END CATCH
SELECT @count = @count-1
SELECT @proxyAcctToken = null
SELECT @pmtAcctToken =null
END
注:表詳細
Column Nmae DataType IsNullable
S_NO int NO
PROXY_PMT_TOKEN nvarchar NO
PMT_ACCT_TOKEN nvarchar NO
CONSUMED_FLAG bit NO
CONSUMED_BY nvarchar YES
擺脫'WHILE'循環....在單個T-SQL語句中寫入'UPDATE' - 這將顯着加快速度! – 2013-03-01 06:16:48
@marc_s。特殊選擇需要優化的查詢(例如,DB中的總記錄數= 10000,如果9999行中的consume_flag ='flase',則需要花費很多時間來檢索單個記錄) – Manu 2013-03-01 07:02:13