2010-05-10 2 views
0

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

update aggregateflags set [email protected] where [email protected] and [email protected] and [email protected] and value != 2 and [email protected] 
IF @@ROWCOUNT=0 
Select * from aggregateflags where [email protected] and [email protected] and [email protected] and value = 2 and [email protected] 
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 

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

ответ

1

Было бы легче узнать структуру aggregateflags Таблица - Типы столбцов и - указатели.

Я хотел бы попробовать:

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

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