我有一張近300萬行的表,每秒有5-10次更新/插入。每行都分配一個類別,並且我想按類別分組以計算每個類別的總行數。SQL Group By with Count很慢
Select CategoryId
, COUNT(*) as TotalRows
FROM Table1
WHERE SaleTypeId = 2 AND CategoryId > 1
GROUP BY CategoryId
表模式:
CREATE TABLE [dbo].[Table1](
[SaleId] INT IDENTITY (1, 1) NOT NULL,
[SaleTypeId] INT NOT NULL,
[CategoryId] INT NULL)
主鍵:
ADD CONSTRAINT [PK_Table1]
PRIMARY KEY CLUSTERED ([SaleId] ASC)
WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF,
IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
我有表的一個非聚集索引:
CREATE NONCLUSTERED INDEX [Index1] ON [dbo].[Table1]
(
[SaleTypeId] ASC,
[CategoryId] ASC
)
查詢計劃:
查詢需要40到60秒來運行,它看起來像大量數據在索引被讀取查找操作。有什麼辦法可以加快這個查詢嗎?我讀過數據越大,計數越慢,並且有更快的方法來計算整個表的數量,但是我需要按類別計數。
添加聚集索引肯定會有所幫助。 –
該圖顯示索引查找發生在Table1.Index1上,該索引不是idx_SaleCategory。看起來你沒有從你的新索引中獲益。 – sarin
@ M.Ali - 它會幫助這個查詢_但是可能是整體聚集索引的一個不好的選擇。 –