内存表将数据保留在内存当中,在高并发的数据更新中,性能高于常用的磁盘表。
创建
1.在数据库中添加 momery optimized data文件组。
2.向该组添加filestream文件。
3.
--创建内存表 CREATE TABLE [dbo].[person] ( ID int not null, name varchar(50) not null, mark varchar(50) --内存表创建时必须声明主键,并且只能创建非聚集索引 CONSTRAINT [PK_person] PRIMARY KEY NONCLUSTERED ( id ) --with的参数表明该内存表数据会持久保存,数据不会丢失。 )WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA ) GO
4.内存表使用的一些限制。
1).使用内存表不能跨数据库,跨数据库的插数据,串表都不行,只能在同一数据库中串表,插入等。
A user transaction that accesses memory optimized tables or natively compiled modules cannot access more than one user database or databases model and msdb, and it cannot write to master.
2).对内存表不能使用一些指令如:truncate ,merge等。
3)只有内存表可以建hash索引。(hash索引在查询条件字段很长或字段多个时使用)
经hash计算值相同的会放到同一个bucket中,数据量大就把bucket_count调到最大。
ALTER TABLE [dbo].[person] ADD INDEX [ix_psonId] NONCLUSTERED HASH ( [ID] )WITH ( BUCKET_COUNT = 1048576) GO