52億レコードを含む次のクラスター化列ストアインデックスからSELECTを実行しています。 STATISTICS IOの出力を確認すると、LOB論理読み取りが表示されています。
私の質問は、テーブル内のどのデータ型もLOB値でないときに、クエリがLOB論理読み取りを実行するのはなぜですか?
SQL Server 2014 SP3 Enterprise Edition環境で作業しています。
テーブル定義:
CREATE TABLE [dbo].[ColumnstoreTableA](
[RollupID] [bigint] IDENTITY(1,1) NOT NULL,
[DT_DIMID] [int] NOT NULL,
[TC_DIMID] [int] NOT NULL,
[C_DIMID] [int] NOT NULL,
[CD_DIMID] [int] NOT NULL,
[AC_DIMID] [int] NOT NULL,
[UA_DIMID] [int] NOT NULL,
[UL_DIMID] [int] NOT NULL,
[JP_DIMID] [int] NOT NULL,
[RTT_DIMID] [int] NOT NULL,
[RA] [int] NOT NULL,
[Impressions] [int] NOT NULL,
[Clicks] [int] NOT NULL,
[Conversions] [int] NOT NULL,
[Sends] [int] NOT NULL,
[CreationDate] [datetime2](0) NOT NULL DEFAULT GETDATE(),
[ModifyDate] [datetime2](0) NOT NULL DEFAULT GETDATE(),
[Z_DIMID] [int] NOT NULL,
[R_Actual] [money] NULL,
[JP_DIMID2] [int] NULL
) ON [PRIMARY]
SELECTステートメント:
SELECT [T].[Impressions]
FROM [dbo].[ColumnstoreTableA] AS [T]
STATISTICS IO出力:
テーブル 'ColumnstoreTableA'。スキャンカウント5、論理読み取り127、物理読み取り0、先読み読み取り0、LOB論理読み取り3719、LOB物理読み取り0、LOB先読み読み取り0。
複数のソースは、ColumnstoreインデックスがそのデータをLOBデータとして格納することを示すように見えます。これは、この場合に発生します。私の理解と要点は、Columnstoreインデックスを使用する場合、LOBの読み取りが常に発生することを期待する必要があるということです。
SELECT COUNT([partition_number]) AS [Number of Partitions],
SUM([in_row_used_page_count]) AS [SUM_in_row_used_page_count],
SUM([lob_used_page_count]) AS [SUM_lob_used_page_count],
SUM([used_page_count]) AS [SUM_used_page_count],
SUM([row_count]) AS [SUM_row_count]
FROM [sys].[dm_db_partition_stats]
WHERE [partition_id] IN (
SELECT [p].[partition_id]
FROM [sys].[partitions] AS [p]
INNER JOIN [sys].[objects] AS [o] ON [o].[object_id] = [p].[object_id]
WHERE [o].[object_id] = 971254615
);
結果:
Number of Partitions SUM_in_row_used_page_count SUM_lob_used_page_count SUM_used_page_count SUM_row_count
-------------------- -------------------------- ----------------------- -------------------- --------------------
847 0 5630558 5630558 5175958971