--=======================================================
在SQL SERVER 2014中,最吸引眼球的就是内存表和本地编译存储过程,在MS强大的宣传下,内存表和本地编译存储过程似乎成了能搞定一切的救世主,这是真的吗? 让我们一步一步来学习探索吧
--=======================================================
创建数据库
由于内存表数据的存放机制和普通表(基于磁盘的表)完全不同,因此内存表的数据需要一个特别的文件夹(注意不是文件哦)来存放,后续会涉及到数据存放原理,此时先放一放,我们来看下数据库创建脚本:
USE [master] --创建数据库 CREATE DATABASE [TestDB] ON PRIMARY ( NAME = N‘TestDB‘, FILENAME = N‘D:\SQL2104\SQLData\TestDB.mdf‘ , SIZE = 204800KB , MAXSIZE = UNLIMITED, FILEGROWTH = 204800KB ) LOG ON ( NAME = N‘TestDB_log‘, FILENAME = N‘D:\SQL2104\SQLData\TestDB_log.ldf‘ , SIZE = 204800KB , MAXSIZE = 2048GB , FILEGROWTH = 204800KB ) GO --创建内存表使用的文件组 ALTER DATABASE [TestDB] ADD FILEGROUP [TestDB_MFG1] CONTAINS MEMORY_OPTIMIZED_DATA GO --创建内存表使用的文件夹 ALTER DATABASE [TestDB] ADD FILE ( NAME = N‘TestDB_MDir1‘, FILENAME = N‘D:\SQL2104\SQLData\TestDB_MDir1‘) TO FILEGROUP [TestDB_MFG1] GO
对于每个数据库,只能创建一个内存优化文件组(Memory-Optimized Filegroup),而对于每个内存优化文件组,可以创建多个关联的文件夹。
PS:内存优化文件组基与FILESTREAM文件组,但是无需为内存优化文件组来启用FILESTREAM。
--=======================================================
创建内存表
创建内存表限制比较多:
1. 支持的数据类型:http://msdn.microsoft.com/ZH-CN/library/dn133179(v=sql.120).aspx
2. 内存表可以使用自增,但唯一允许用于 seed 和 increment 的值为 1;(1,1) 是 seed 和 increment 的默认值
3. 内存表中
CREATE TABLE [dbo].[TB1_IM] ( [c1] [int] NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000), [c2] [nchar](200) COLLATE Chinese_PRC_Stroke_90_BIN2 NOT NULL INDEX ix_c2 NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000), [c3] [nvarchar](200) COLLATE Chinese_PRC_Stroke_90_BIN2 NOT NULL, [c4] [nvarchar](200) COLLATE Chinese_PRC_Stroke_90_BIN2 NOT NULL, INDEX ix_c3_c4 NONCLUSTERED HASH(c3,c4) WITH(BUCKET_COUNT=1000000), INDEX ix_c2_c3 NONCLUSTERED (c2,c3) )WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )