我正在創建一個應用程序作爲URL計數器。 我已經創建了一個表來存儲url和它的計數。主鍵錯誤Vs select命令
CREATE TABLE [dbo].[tblurlcounter](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[type] [varchar](500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[count] [bigint] NULL,
CONSTRAINT [PK_tblurlcounter] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
我已經創建了一個存儲過程來在表中插入/更新url。 意味着什麼時候使用存儲過程將值「URL」插入到該表中,然後檢查它是否存在,然後更新其計數,如果不存在,則將其插入到count = 1的表中。
我的存儲過程是這樣的:
declare @count int
select @count= [count] from tblurlcounter where [type] = @type
if @count > 0
begin
update tblurlcounter set [count][email protected] + 1 where [type] = @type
select @count + 1
end
else
begin
INSERT INTO [dbcounter].[dbo].[tblurlcounter]
([type]
,[count])
VALUES
(@type
,1)
end
這個應用程序將獲得在幾分鐘約80,000至100,000命中。所以我希望我的存儲過程能夠以良好的速度執行操作。我的意思是我的解決方案應該優化。
有人建議我改變我的表格,並創建它的名爲「類型」(我用來存儲url)作爲主鍵和存儲過程我應該首先嚐試插入記錄,如果它的投擲錯誤,然後檢查下一行中的錯誤並執行更新操作。
,所以我很困惑的是哪一個會更快,主鍵錯誤apporach或者我應該選擇查詢和基礎去選擇的結果,我應該執行插入/更新操作
現在我需要專家的建議是,哪種方法是正確的,如果有其他好的方法可用,那麼請給我建議。
感謝
你的代碼目前擁有的競爭條件(不使用事務,並使用默認更強的隔離):兩次執行可能都觀察到的計數爲0,從而嘗試插。 – 2011-04-13 07:30:46