SQL SERVER 2014--学习笔记1
--=======================================================
在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. 内存优化表不支持CHECK约束,在非hash索引列上也不行;
4. 内存优化表不支持使用的排序规则所具有的代码页并非 1252 的数据类型 char(n) 和 varchar(n);
5. 内存优化表不支持nvarchar(max)或varchar(max)
6. 内存优化表索引不支持未使用 *_BIN2 排序规则的字符列上的索引,在非hash索引列上也不行;
7. 内存优化表上的索引不支持索引键中有可为 Null 的列,在非hash索引列上也不行;
8. 内存优化表必须有至少一个索引或主键
创建内存优化表Demo
CREATE TABLE [dbo].[TB1_IM]
(
[c1] [int] NOT NULL IDENTITY(1,1) 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 )
内存优化表的最大特色就是HASH索引,而HASH索引最大的特色就是点查询比较快,但是对于范围查找就苍白无力啦。
上帝为你打开一扇窗的时候,他肯定顺手关掉一扇门。
--===============================================================================
关于BUCKET_COUNT的值的设置
MS有如下建议:
在大多数情况下,Bucket 计数应该介于索引键中非重复值数目的 1 到 2 倍之间。 如果索引键包含许多重复值,且平均而言对于每个索引键值超过 10 行,则改用非聚集索引
您不见得始终都能够预测到某个特定索引键可能具有或将具有多少个值。 如果 BUCKET_COUNT 值处于实际键值数目的 5 倍之内,性能就应该是可接受的。
简单理解就是: 要尽可能保持每个Bucket里存放数据而又不存放过多数据,如果空闲Bucket过多就会造成浪费,如果单个Bucket中存放过多行数据,就会造成性能问题。
--=================================================================================
关于索引维护和表修改
内存索引表不支持ALTER TABLE 和 ALTER INDEX操作,如果需要修改表或者修改索引,那么SORRY,请重新删除创建!(有没有瞬间无爱的赶脚!)
--=================================================================================
关于数据持续性
对于内存优化表,有两种持续性可以选择:SCHEMA_ONLY(非持久表)和SCHEMA_AND_DATA(持久表),SCHEMA_ONLY 选项会导致数据在实例重启后丢失;而对于SCHEMA_AND_DATA(持久表),又可以设置完全持久行还是延迟持续性,延迟持续性选项允许在事务提交时可以不立即将日志写入磁盘,从而提升性能,当然代价就是发生故障时可能丢失数据。
--===============================================================================
未完待续
SQL SERVER 2014--学习笔记1的更多相关文章
- SQL Server 2012 学习笔记5
1. 索引(Index) 索引是快速的定位和查找数据.索引分为: 聚集索引:唯一,默认主键,一般选取比较连贯的字段,聚集索引是物理排序. 非聚集索引: 并没有把数据物理排序,只是多了一个索引页(包括索 ...
- SQL Server 2012 学习笔记1
1. 新建的数据库会产生两个文件(数据文件.mdf 和日志文件.ldf) 2. 编辑表格和为表格录入数据 "Design"为设计表格,"Edit Top 200 Rows ...
- MS Sql server 2008 学习笔记
数据库中常用的概念 Sql本身是一个服务器,没有界面,Management Studio 只是一个SQL Server管理工具而已,不是服务器. Sql server 在管理工具下面的服务SQL S ...
- sql server 2008 学习笔记
sql server 2008 删除已有的实例 想从setup.exe中区卸载,没找到. 原来还是要从控制面板中卸载,卸载Microsoft SQL Server 2008 卸载界面会提示让你选择要删 ...
- SQL Server数据库学习笔记-概念数据模型
概念数据模型(Conceptual Data Model)也称为信息模型.它是对客观事物及其联系的抽象,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具. ...
- SQL Server 2012 学习笔记4
1. 约束 , 给某些字段添加约束条件, 比如年龄在1-100岁之间 添加约束,输入 Age>1 and Age < 100 2. 存储过程 存储过程也可以做增删改查 存储过程的 ...
- SQL Server 2012学习笔记 1 命令行安装
setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=install /PID=748RB-X4T6B-MRM7V-RTVFF-CHC8H /FEATU ...
- SQL Server 2012 学习笔记3 增查改删
现在举例几个"增查改删"的语句 select * from UserInfor --查找所有字段 select username,UserId from UserInfor -- ...
- SQL Server 2012 学习笔记2
1. 新建数据库 可以在对应目录下右键新建数据库,也可以用程序添加: 先打开程序编辑对话框"New Query" create database Library 2. 添加表格 可 ...
- SQL Server数据库学习笔记-设计表时应该考虑的因素
设计数据库其实就是设计数据库中的表.到底要注意些什么才能够设计好一个数据库呢?一个宗旨,8个建议. 一个宗旨“尽量少的表,每个表中尽量少的列,合理的表结构”. 8个建议: 第一个,首先要考虑的是咱们这 ...
随机推荐
- ECMAScript6新特性之Array API
一 填充数组 var arr = new Array(5); arr.fill('abc',2,4); console.log('Array.prototype.fill',arr); // [und ...
- JdbcTemplate实现CRUD操作
------------------siwuxie095 JdbcTemplate 实现 CRUD 操作 1.J ...
- iOS开发总结
最近在工作中使用Objective-C开发iOS客户端程序,它一方面和Server通讯,处理网络连接,收发报文,实现业务逻辑;另一方面为UI层提供各种业务API. 下面记录用到的相关知识点,困难, ...
- Castle ActiveRecord学习(三)数据映射及特性描述
Model中的Demo: using Castle.ActiveRecord; using Castle.ActiveRecord.Queries; using System; using Syste ...
- IIS不能下载.apk文件
IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载. 打开IIS服务管理器,找到服务器,右键-属性,打开IIS服务属性: 单击MIME类型下的“MIME类 ...
- Windows 7 手动添加受信任证书教程
步骤如下: 1.点击开始-运行,如下图: 2.弹出"控制台"窗口如下,如下图: 3.点击"文件-添加/删除管理单元",如下图: 4.选择"证书&quo ...
- PowerDesigner :
P:是否为主键: F:是否为外键: M:表示强制非空: D:是否在模型中显示 修改样式.字体.颜色.等:Tools->Display Preferences->Format-> Po ...
- 11月11日光棍节考试总结hhh
好吧,第一题字符串裸栈就能A 第二题字典序没调完,先写的第一题和第三题暴力,第二题读题感觉自己不会写,其实也能写出来,浪费了好多时间 第三题DP大概是写的暴力,原本可以搞到20分,要交的时候发现自己少 ...
- 白盒静态自动化测试工具:PMD使用指南
参考文献:http://www.oschina.net/p/pmd/http://www.cnblogs.com/flyme/archive/2011/09/09/2172548.htmlhttp:/ ...
- 合成冷色黑暗恐怖魔法师图片的PS教程
教程主要使用Photoshop合成黑暗风格的魔法师施法场景,整体的场景效果以冷色风格为主,加上素材的叠加完成最终效果图,希望朋友可以喜欢.效果图: 先把背景拖进去,用工具吧字母弄掉. 加一个调色图层 ...