web-dev-qa-db-ja.com

クラスター化列ストアからのSELECTの結果、LOB読み取り

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。

3
SQL Sean

複数のソースは、ColumnstoreインデックスがそのデータをLOBデータとして格納することを示すように見えます。これは、この場合に発生します。私の理解と要点は、Columnstoreインデックスを使用する場合、LOBの読み取りが常に発生することを期待する必要があるということです。

Columnstoreインデックスの構造は何ですか?

SQL Serverで列ストアインデックスを使用する方法

SQL Server 2012列ストアインデックス内

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
6
SQL Sean