Как настроить следующий запрос T- SQL - PullRequest
0 голосов
/ 04 марта 2020

Это мое sql query

SELECT MIN(CompletedDate), MAX(CompletedDate) FROM dbo.FactTable
        WHERE IdColumn IN ('guid1','guid2','guid3', 'guid4')
        AND NameColumn1 IN (N'150 comma seperated names')
        AND NameColumn2 = ('name') 

, выполняемое в соответствии с таблицей фактов только с 1,4 миллионами записей в Data Warehouse. На моем локальном компьютере требуется 9 секунд. Столбец CompletedDate имеет значение Nullable с некластеризованным индексом и большим количеством нулей. Мне нужно знать, можно ли его оптимизировать дальше с меньшим временем выполнения.

enter image description here

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Создать индекс покрытия для столбца CompletedDate на вашей таблице.

Create Index IDX on TableName (col1,col2) Then Rewrite that as

Create Index IDX on TableName (col1,col2) Include (CompletedDate). 

Таким образом, ваш поиск ключа будет удален.

0 голосов
/ 04 марта 2020

Я собираюсь рекомендовать использовать табличную переменную для хранения возможных NameColumn1 значений:

DECLARE @Names TABLE (NAME VARCHAR(255) PRIMARY KEY)

INSERT INTO @Names (NAME)
     SELECT spt.col
     FROM dbo.splitvalue(@name, ',') spt

SELECT . . .
FROM dbo.FactTable ft
WHERE IdColumn IN ('guid1','guid2','guid3', 'guid4') AND 
      NameColumn2 = 'name' AND
      EXISTS (SELECT 1 FROM @Names N WHERE N.NAME = ft.NameColumn1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...