NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:002273
用户头像

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

关注

评论

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

DDIA 读书笔记(3)数据编码与演化

莫黎

作为打工人,如何正确的选择自动化测试工具(完全指南)

软测小生

软件测试 测试 软件自动化测试 测试工具 测试开发

人少钱少需求多的新项目该怎么带?看到这篇我心里有底了!

华为云开发者联盟

技术 运维 后端

架构师训练营 -week06-总结

大刘

极客大学架构师训练营

架构师训练营第二周作业

李日盛

架构

第2周 框架设计-作业

SuGeek

cglib 入门前篇

Rayjun

Java cglib

第六周 Doris临时故障时序图

Geek_fabd84

软考资料学习库

玄兴梦影

技术实践丨PostgreSQL插件之pg_dirtyread "闪回查询"

华为云开发者联盟

数据库 后端

训练营第二周作业

大脸猫

极客大学架构师训练营

2020中国系统架构师大会活动回顾:ZEGO实时音视频服务架构实践

ZEGO即构

架构设计 RTC

第二周-作业

ray-arch

极客大学架构师训练营

深入浅出System.gc() 源码解读

AI乔治

Java 架构

一周信创舆情观察(10.19~10.25)

统小信uos

新手初学Java性能之 垃圾收集器

Java架构师迁哥

最实用的无线PORTAL测试案例

测试 无线网络 网络

打破内卷化,AppGallery Connect的全生命周期赋能方案

脑极体

Mac常见问题解决方案与使用技巧

jiangling500

Mac

架构师训练营第 1 期 week6

张建亮

极客大学架构师训练营

架构师训练营第 2 周学习总结

菜青虫

极客大学架构师训练营

架构师训练营第 1 期第 6 周作业

owl

极客大学架构师训练营

“绝影”机器狗如何利用ModelArts强化学习算法更改导航轨迹

华为云开发者联盟

人工智能 机器狗 导航

训练营第二周总结

大脸猫

极客大学架构师训练营

架构训练营 - 第6周课后作业 - 学习总结

Pudding

二、ood原则

Geek_28b526

架构师训练营第 1 期 week6 总结

张建亮

极客大学架构师训练营

架构师训练营第 2 周课后练习

菜青虫

极客大学架构师训练营

架构师训练营 - 第 6 周课后作业(1 期)

Pudding

C 语言实现一个简单的 web 服务器

C语言与CPP编程

c c++ socket C语言 HTTP

前端组件化

韩向民

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