尝试制定 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 上删除并重新创建索引吗?
- 索引碎片在内存优化表中真的消失了吗?
我认为答案是肯定的,但这似乎很好。
进一步检查存在以下限制:
- 内存优化表不支持 ALTER TABLE、sp_rename、alter bucket_count 以及在 CREATE TABLE 语句之外添加和删除索引。
- 不支持 UNIQUE、CHECK 和 FOREIGN KEY 约束。
内存中 OLTP 的 Transact-SQL 支持
没有提出批评产品的问题,这是一个很酷的功能。但是,如果一个表不支持声明性引用完整性 (DRI),你可以称它为关系数据库吗?