-1
我有一個報表,它是從我的數據倉庫中的各種事實表填充的。問題是,對於該報表中的一位客戶,需要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
任何幫助或指導將不勝感激。
更新2:解決 我能獲得許可,過濾掉在樹上不活躍的人。如果我保留我放在桌面上的索引,這幾乎將查詢執行的一半削減了。
請發佈查詢計劃。我懷疑INDEX IX_LFT NONCLUSTERED(lft)沒有被使用。但與其他兩個指標應該涵蓋聯合和地點。你違反了指數? – Paparazzi
您是否看過執行計劃和統計數據?我建議使用這些統計數據:'SET STATISTICS IO ON'' 'SET STATISTICS TIME ON',只記得關閉它們。請使用這些工具來比較您的查詢和索引更改,然後將問題與結果一起發佈。 – jkdba
我懷疑任何索引都會幫助這裏說實話。你將返回530萬行中的420萬。這是表中總行數的80%。更大的問題是爲什麼你有一個顯示420萬行的報告? –