写点什么

SQL Server 现在提供 NoSQL 风格的内存优化表了

  • 2016-03-31
  • 本文字数:942 字

    阅读完需:约 3 分钟

SQL Server 2014 引入的内存优化表没有写入锁,可以避免磁盘 I/O,支持完全编译存储过程,与传统表相比,显著地提升了性能。但是,它也有许多限制,包括无法使用备受 NoSQL 设计风格青睐的大文档。

在 SQL Server 2016 中,其中许多限制已经接触。首先是在内存优化表本机编译存储过程中支持 LOB 类型。这意味着用户可以使用 varChar(max)、nVarChar(max) (都可以包含 XML 和 JSON 数据)和 varBinary(max)。8060 字节的行大小限制也解除了,即使对于没有包含 LOB 类型的宽表也是如此。

尽管如此,如果可能的话,微软并不建议使用这个特性。如果可以将所有的数据都存入 varChar(8000) 或者更小的列中,而不是 varChar(max) 中,那么就可以避免写入时访问存储大对象的隐藏表的开销。

内存优化表约束

内存优化表的另一个限制是不能创建约束(除了唯一主键)。从应用程序设计的角度来说,这不是绝对必要的,但约束确实降低了多种数据冲突类型发生的可能性。

  • 内存优化表之间的 FOREIGN KEY 约束
  • CHECK 约束
  • UNIQUE 约束

注意,普通表和内存优化表之间的外键约束还不允许。

本机编译存储过程改进

熟悉这个术语的人都知道,一个“本机编译存储过程”在创建时就被编译成了高度优化的机器代码。它只能操作内存优化表,但与普通的存储过程相比(在运行时解释),显著地提升了性能。

除了支持 LOB 类型外,用户可以在 INSERT、UPDATE 和 DELETE 语句中使用 OUTPUT 子句。这可以减少对单独查询的需求,反过来,这可能减少事务及相关锁定需求。

现在,本机编译存储过程还提供了其他标准 SQL 特性,包括:

  • UNION 和 UNION ALL
  • SELECT DISTINCT
  • OUTER JOIN
  • SELECT 语句中的子查询(EXISTS、IN、标量子查询)

本机编译函数

现在,用户可以本机编译标量函数。要这样做的话,用户需要使用WITH NATIVE_COMPILATION、SCHEMABINDING 作为指令,并将具体的代码封装进一个BEGIN ATOMIC 块中。这与本机编译存储过程不同,后者仅使用WITH SCHEMABINDING 指令标记。

本机编译触发器

让我们继续这个话题,如果使用了WITH NATIVE_COMPILATION,那么AFTER 触发器现在可以置于内存优化表上了。

要了解更多信息,可以查看 SQL2016 CTP3 新特性自CTP3 以来SQL Server 2016 中的内存OLTP 新特性

查看英文原文: SQL Server Now Offers NoSQL Style Memory-Optimized Tables

2016-03-31 19:002881
用户头像

发布了 1008 篇内容, 共 441.2 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

11个提高产品经理工作效率的必备工具,果断收藏

马踏飞机747

大数据 设计 产品经理

架构师训练营第六周作业

烟雨濛濛

架构师训练营第六周作业

Melo

百万级别数据Excel导出优化

Throwable

架构设计 springboot

看动画学算法之:排序-冒泡排序

程序那些事

算法 动画 排序算法 轻松学

修炼我们的智慧之眼

J.Smile

认知提升

如何搭建Hive 环境

Rayjun

大数据 hive

关于架构的几件小事:架构概述(1)

北风

架构 架构设计 架构师 架构设计原则

基础篇:JAVA基本类型

csc

Java Java 25 周年

架构师训练营第六周总结

陈靓-哲露

数据分析之AB testing实战(附Python代码)

JackTian

Python 编程 程序员 数据分析 AB testing实战

SpringBoot2.x入门:应用打包与启动

Throwable

springboot

list vs tupple

Leetao

Python 数据结构 Python基础知识

【计算机网络】网络层——路由器与路由选择协议

烫烫烫个喵啊

计算机网络 网络层

并行流ParallelStream中隐藏的陷阱

Throwable

Java

谈谈对分布式事务的一点理解和解决方案

Throwable

分布式 分布式事务 架构设计

3W字干货深入分析基于Micrometer和Prometheus实现度量和监控的方案

Throwable

Java 监控 Grafana Prometheus springboot

大话设计模式 | 4. 装饰模式

Puran

C# 设计模式

不会有人还不知道全文检索工具Lucene怎么用吧?文字长文教程

给你买橘子

Java 搜索引擎 lucene 程序员 开发工具

云原生实践系列:概述

孤岛旭日

Serverless 微服务 Service Mesh 服务架构

基础篇:Object对象

csc

Java Java 25 周年

SpringBoot 入门:02 - 实现 MVC

封不羁

Java spring springboot

玛雅密码社区不忘初心 共筑未来通证新经济

Geek_116789

架构师训练营第六周总结

烟雨濛濛

“新基建”来了!云南三年投资3776亿!

CECBC

北京区块链规划重点发展海淀朝阳通州等区,加大对代币监管力度

CECBC

北京行动计划 四个高地 需求导向 为政务服务

iOS - CollectionViewCell对应不同flow layout的实例

teoking

ios

ARST Week7

时之虫

ARTS 打卡计划

DolphinScheduler-1.3.0-dev功能体验

Eights

大数据 hadoop

Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?

newbe36524

Docker .net core netcore ASP.NET Core

Vagrant 快速入门

FeiLong

vagrant

SQL Server现在提供NoSQL风格的内存优化表了_.NET_Jonathan Allen_InfoQ精选文章