Sql-Server

聚集索引和分區列的區別

  • February 13, 2020

據我了解分區,您分區的列是將事物劃分為分區的方式。

但是分區列與磁碟上的順序有什麼關係嗎?(除了數據進入哪個分區。)

假設我有一張如下所示的表格:

CREATE TABLE [dbo].[Something](
   [SomethingId] [bigint] IDENTITY(1,1) NOT NULL,
   [OtherThingId] [bigint] NOT NULL,
   [CreatedBy] [int] NOT NULL,
   [CreatedWhen] [datetime] NOT NULL,
   [CreatedWhere] [varchar](255) NOT NULL,
    CONSTRAINT [PK_Something] PRIMARY KEY CLUSTERED 
   (
       [SomethingId] DESC
       [OtherThingId] DESC,
   )
) ON OtherThingIdPartitionScheme(OtherThingId)

將儲存新行的分區由 OtherThingId 決定。

但是我將聚集索引設置為首先是SomethingId,然後是OtherThingId。

**這是否意味著每個分區將按SomethingId排序,然後按OtherThingId?

(即使它僅按 OtherThingId 的輔助值進行分區。)**

(我現在正在設置很多分區,我想確保我完全理解它。)

但是分區列與磁碟上的順序有什麼關係嗎?

從聚集索引結構

聚集索引在 中只有一行sys.partitions,索引index_id = 1使用的每個分區都有。**預設情況下,聚集索引只有一個分區。當聚集索引有多個分區時,每個分區都有一個 B 樹結構,其中包含該特定分區的數據。**例如,如果一個聚集索引有四個分區,那麼就有四個 B-tree 結構;每個分區一個。

從表和索引組織:

當表或索引使用多個分區時,數據會被水平分區,以便根據指定的列將多組行映射到單獨的分區中。分區可以放在數據庫中的一個或多個文件組上。當對數據執行查詢或更新時,表或索引被視為單個邏輯實體。

**數據鏈中的頁面和其中的行按聚集索引鍵的值排序。**所有插入都在插入行中的鍵值符合現有行之間的排序順序的位置進行。B 樹的頁面集合由sys.system_internals_allocation_units系統視圖中的頁面指針錨定。

如果您想真正深入了解數據的佈局方式,請參閱:儲存引擎內部:sp_AllocationMetadata

附帶說明:SQL Server 2016 CTP2 具有[TRUNCATE TABLE … WITH ( PARTITIONS ( { | }

用於自動分區切換簽出 - SQL Server 分區管理實用程序

引用自:https://dba.stackexchange.com/questions/103751