Я создаю приложение в качестве счетчика URL.
я создал таблицу для хранения URL-адреса и его количества.
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]=@count + 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 показов за минуту. поэтому я хочу, чтобы моя хранимая процедура выполняла операции с хорошей скоростью. я имею в виду, что мое решение должно быть оптимизировано.
кто-то предложил мне изменить свою таблицу и создать ее поле с именем "type" (которое я использую для хранения URL) в качестве первичного ключа, а в хранимой процедуре я должен сначала попытаться вставить запись и, если она выдаст ошибку затем проверьте наличие ошибки в следующей строке и выполните операцию обновления.
, поэтому я запутался, что какой из них будет быстрее, возникнет ошибка первичного ключа, или я должен идти с запросом выбора и основываться на результате выбора, я должен выполнить операцию вставки / обновления
Теперь мне нужен совет экспертов, какой подход правильный, и если есть какой-либо другой хороший подход, то, пожалуйста, предложите мне.
спасибо