У меня есть таблица отчетов, которая заполняется из разных таблиц фактов в моем хранилище данных. Проблема в том, что для одного клиента в этой таблице отчетов требуется 46 секунд, чтобы вытащить его данные. Один клиент имеет 4232424 записей. В общей сложности таблица содержит 5336393 записи и имеет 4 столбца. Я опубликую структуру таблицы и запрос, который я запускаю. Мне нужно, чтобы время результата на этом было как можно ниже. Я пробовал таблицы памяти, различные индексы и индексированные представления.Оптимизация больших таблиц В SQL Server 2014
ТАБЛИЦА СТРУКТУРА
CREATE TABLE cache.Tree
(
CustomerID INT NOT NULL PRIMARY KEY NONCLUSTERED,
RelationA_ID INT NOT NULL,
RelationB_ID INT NOT NULL,
NestedLevel INT NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
INDEX IX_LEGS CLUSTERED (lft, rgt),
INDEX IX_LFT NONCLUSTERED (lft)
)
Отчет Запрос
SELECT
tp.CustomerID AS DLine,
t.CustomerID,
t.RelationA_ID,
Level = t.NestedLevel - tp.NestedLevel,
IndentedSort = t.lft
FROM cache.UnilevelTreeWithLC2 tp
INNER JOIN cache.UniLevelTreeWithLC2 t
ON t.lft between tp.lft AND tp.rgt
WHERE tp.CustomerID = 7664
Любая помощь или руководство будет весьма признателен.
UPDATE 1: Запрос Выполнение плана
UPDATE 2: решаемые Я был в состоянии получить разрешение на отфильтровывать неактивных людей в дереве. Это сократило выполнение запроса почти наполовину, если я сохраню индексы, которые я помещаю в таблицу.
Пожалуйста, разместите план запроса. Я подозреваю, что INDEX IX_LFT NONCLUSTERED (lft) не используется. Но с двумя другими индексами следует охватить объединение и где. И вы дефрагментировали индексы? – Paparazzi
Вы еще смотрели план выполнения и статистику? Я рекомендую использовать эти статистические данные: 'SET STATISTICS IO ON' ' SET STATISTICS TIME ON', просто не забудьте выключить их. Используйте эти инструменты для сравнения ваших запросов и изменений индекса, а затем отправляйте свои вопросы вместе с результатами. – jkdba
Я сомневаюсь, что любое индексирование поможет здесь быть честным. Вы возвращаете 4,2 миллиона из 5,3 миллиона строк. Это составляет 80% от общего количества строк в таблице. Большой вопрос: почему у вас есть отчет, показывающий 4,2 миллиона строк? –