Azure SQL 高级表特性深度解析
1. 非聚集哈希索引
非聚集哈希索引是一种内存中的哈希表,它使用列值作为键(例如 EmpID
),并包含指向表中实际行的指针列表。每个哈希表由固定数量的槽(哈希桶)组成,这些槽包含指向实际行的指针数组。具有相同哈希值的行指针会链接到代表其自身哈希桶的列表中。
CREATE TABLE [dbo].[Employees](
[EmpID] [int] NOT NULL
CONSTRAINT PK_Employees_EmpID PRIMARY KEY
NONCLUSTERED HASH (EmpID) WITH (BUCKET_COUNT = 100000),
[EmpName] [varchar](50) NOT NULL,
[EmpAddress] [varchar](50) NOT NULL,
[EmpDEPID] [int] NOT NULL,
[EmpBirthDay] [datetime] NULL
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)
在创建索引时必须指定桶的数量,这会影响每个桶中指针列表的长度。不同键值的数量与哈希桶数量的比率代表了预期的平均桶链表长度。较长的列表意味着根据键查找行时需要更多的操作。
桶的数量应该在索引键中不同值数量的 1 到 2 倍之间。在实践中,很难估计列中不同值的数量;但是,如果 BUCK