Время ожидания SQL и индексы - PullRequest
1 голос
/ 20 июля 2010

Изменяя и находя вещи в базе данных, содержащей несколько десятков таблиц с полмиллионом строк в больших, я часто сталкиваюсь с таймаутами.

Некоторые из этих таймаутов я не понимаю.Например, я получил эту таблицу:

CREATE TABLE dbo.[VPI_APO]
 (
  [Key] bigint IDENTITY(1,1) NOT NULL CONSTRAINT [PK_VPI_APO] PRIMARY KEY,
  [PZN] nvarchar(7) NOT NULL,
  [Key_INB] nvarchar(5) NOT NULL,
 ) ON [PRIMARY]
GO

ALTER TABLE dbo.[VPI_APO] ADD CONSTRAINT [IX_VPI_APOKey_INB] UNIQUE NONCLUSTERED 
 (
  [PZN],
  [Key_INB]
 ) ON [PRIMARY]
GO

Я часто получаю тайм-ауты при поиске элемента в этой таблице следующим образом (при вставке большого количества элементов):

SELECT [Key] FROM dbo.[VPI_APO] WHERE ([PZN] = @Search1) AND ([Key_INB] = @Search2)

Эти таймаутыпри поиске на уникальных ограничениях встречаются довольно часто.Я ожидал, что уникальные ограничения будут иметь те же преимущества, что и индексы, я ошибся?Нужен ли также индекс для этих полей?
Или мне придется искать по-другому, чтобы воспользоваться ограничением?

Я использую SQL Server 2008 R2.

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

Уникальное ограничение создает индекс. Исходя из запроса и определенного ограничения, вы должны находиться в ситуации покрытия, то есть индекс предоставляет все, что нужно запросу, без необходимости возвращаться в кластер или в кучу для извлечения данных. Я подозреваю, что ваш индекс недостаточно избирателен или что ваша статистика устарела. Сначала попробуйте обновить статистику с помощью sp_updatestats. Если это не меняет поведение, попробуйте использовать UPDATE STATISTICS VPI_APO WITH FULL SCAN. Если ни один из этих способов не работает, вам необходимо проверить селективность индекса с помощью DBCC SHOW_STATISTICS.

2 голосов
/ 20 июля 2010

Моя первая мысль - это прослушивание параметров.

Если вы используете SQL Server 2008, попробуйте " ОПТИМИЗИРОВАТЬ ДЛЯ НЕИЗВЕСТНО * ", а не маскировку параметров

Вторая мысльизмените уникальную константу на индекс и явно ВКЛЮЧИТЕ столбец Key.Внутренне они одинаковы, но в качестве индекса вы обладаете большей гибкостью (например, фильтр, включение и т. Д.)

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