【发布时间】:2013-07-11 02:29:37
【问题描述】:
尝试制定 SQL Server 2014 内存优化表的方法
一个非常简单的表是应用程序中最活跃的表
- 数据永远不会发生变异
- 加载全部通过批量处理
- 大约 2 亿条记录
- 目前所有读取都使用 (nolock)
表格
int PK1
int PK2
composite clustered PK of PK1, PK2
non-clustered index on PK2
按照加载顺序选择 PK
在加载期间,非聚集索引被禁用,然后在加载结束时重建
该索引降低了加载速度,并且在加载结束时非常分散,无论如何都需要重建它
- 所有搜索都是相等的(从不 、)
- 大部分搜索都在 PK2 上
- 在 PK1 上进行一些简单的搜索并用于连接。
最后是问题。
- 据我了解,内存优化索引不会碎片化。
- 作为内存表,我是否可以反转 PK(PK2、PK1)并在 PK1 上创建第二个索引?
- 是否没有理由在 PK1 上删除并重新创建索引?
- 内存优化表中的索引碎片真的消失了吗?
我认为答案是肯定的,但它似乎是真的。
Guidelines for Using Indexes on Memory-Optimized Tables
进一步检查存在局限性:
- ALTER TABLE、sp_rename、alter bucket_count 以及添加和删除 不支持 CREATE TABLE 语句之外的索引 内存优化表。
- 不支持 UNIQUE、CHECK 和 FOREIGN KEY 约束。
Transact-SQL Support for In-Memory OLTP
没有打开问题来批评产品,这是一个很酷的功能。但是,如果一个表不支持声明性引用完整性 (DRI),您可以将其称为关系数据库吗?
【问题讨论】:
标签: tsql indexing sql-server-2014