Оптимизация t-sql запроса - PullRequest
0 голосов
/ 10 мая 2010

Я новичок в t-sql, и мне интересно, почему этот запрос выполняется так долго? Есть ли способ оптимизировать это ??

update aggregateflags set value=@value where objecttype=@objecttype and objectcode=@objectcode and storagetype=@storagetype and value != 2 and type=@type 
IF @@ROWCOUNT=0 
Select * from aggregateflags where objecttype=@objecttype and objectcode=@objectcode and storagetype=@storagetype and value = 2 and type=@type  
IF @@ROWCOUNT=0  
insert into aggregateflags (objectcode,objecttype,value,type,storagetype) 
select @objectcode,@objecttype,@value,@type,@storagetype

@value int
@storagetype int
@type int
@objectcode nvarchar(100)
@objecttype int

Нет внешнего ключа.

Ответы [ 2 ]

1 голос
/ 10 мая 2010

Было бы проще узнать структуру aggregateflags типов таблиц и столбцов и индексов .

Я бы попробовал:

  1. Проверьте , если * соответствует индексу в таблице aggregateflags. Если не найдено другого соответствия или создан индекс соответствия для запроса, это самая важная вещь (проверка выполнение плана может помочь вам).
  2. Добавить подсказки (если можете) WITH (ROWLOCK) для UPDATE и WITH (NOLOCK) для SELECT - это поможет избежать блокировки редактирования или чтения данных.
  3. Измените SELECT * FROM aggregateflags... на SELECT TOP 1 1 FROM aggregateflags WITH (NOLOCK)... - вам не нужны данные - вам просто нужно проверить, существует ли строка .
0 голосов
/ 10 мая 2010

Убедитесь, что у вас есть индексы, определенные в ваших столбцах. Если это не поможет, используйте кнопку «Показать план выполнения» в SQL Studio и проверьте, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...