Warum verbessert das Vorhandensein eines Primärschlüssels in der Tabelle die Leistung von Spaltenspeicherindizes erheblich?

Ich habe versucht, die Art der Leistungsverbesserungen zu ermitteln, die Spaltenspeicherindizes für eine Tabelle bereitstellen können. Die Tabelle hat etwa 3,7 Millionen Zeilen und 11 Spalten und wird als Heap gespeichert (d. H. Ohne Primärschlüssel). Ich erstelle einen Spaltenspeicherindex für die Tabelle und führe die folgende Abfrage aus:

SELECT 
    [Area], [Family],
    AVG([Global Sales Value]) AS [Average GlobalSalesValue],
    COUNT([Projected Sales])
FROM 
    dbo.copy_Global_Previous5FullYearSales
WHERE 
    [Year] > 2012  
GROUP BY 
    [Area], [Family]

Die Anweisung create table lautet wie folgt:

CREATE TABLE [dbo].[copy_Global_Previous5FullYearSales]
(
    [SBU] [NVARCHAR](10) NULL,
    [Year] [INT] NULL,
    [Global Sales Value] [MONEY] NULL,
    [Area] [NVARCHAR](50) NULL,
    [Sub Area] [NVARCHAR](50) NULL,
    [Projected Sales] [MONEY] NULL,
    [Family] [NVARCHAR](50) NULL,
    [Sub Family 1] [NVARCHAR](50) NULL,
    [Sub Family 2] [NVARCHAR](50) NULL,
    [Manufacturer] [NVARCHAR](40) NULL,
    [rowguid] [UNIQUEIDENTIFIER] NOT NULL,
    [ID] [INT] IDENTITY(1,1) NOT NULL,

    PRIMARY KEY CLUSTERED ([ID] ASC)
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
              IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
              ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Die Performance-Gewinne, die ich in diesem Fall durch den Column-Store-Index erhalte, sind vernachlässigbar. Die Abfrage mit dem Spaltenspeicherindex wird fast so langsam wie die ursprüngliche Abfrage ohne Index ausgeführt, in einigen Fällen sogar langsamer, obwohl auch der Stapelverarbeitungsmodus verwendet wird.

Wenn ich eine ständig wachsende Primärschlüssel-ID für die vorhandene Tabelle erstelle und den Spaltenspeicherindex neu erstelle, kann ich die CPU-Zeit um das 15-Fache und die verstrichene Zeit um das 3-Fache verbessern.

Ich verstehe nicht, wie sich das Hinzufügen eines Primärschlüssels auf die Abfrageleistung für Spaltenspeicherindizes auswirkt, in denen die Daten ohnehin in einem komprimierten Format gespeichert sind. Auch Primärschlüssel ändern nur die Reihenfolge der Seiten, die in diesem Fall keine wären.

Below ist der Ausführungsplan

Antworten auf die Frage(2)

Ihre Antwort auf die Frage