热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

SQLServer2014引入的内存优化表没有写入锁,可以避免磁盘IO,支持完全编译存储过程,与传统表相比,显著地提升了性能

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

内存优化表约束

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n
  • 内存优化表之间的FOREIGN KEY约束 \u0026#xD;\n\u0026#xD;\n
  • CHECK约束 \u0026#xD;\n\u0026#xD;\n
  • UNIQUE约束\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

本机编译存储过程改进

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n
  • UNION和UNION ALL \u0026#xD;\n\u0026#xD;\n
  • SELECT DISTINCT \u0026#xD;\n\u0026#xD;\n
  • OUTER JOIN \u0026#xD;\n\u0026#xD;\n
  • SELECT语句中的子查询(EXISTS、IN、标量子查询)\u0026#xD;\n

本机编译函数

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

本机编译触发器

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • mysqldinitializeconsole失败_mysql03误删除了所有用户解决办法
    误删除了所有用户解决办法第一种方法(企业常用)1.将数据库down掉[rootdb03mysql]#etcinit.dmysqldstopShuttingdownMySQL..SU ... [详细]
  • 数据库基本介绍
    1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
  • MySQL:互联网公司常用 分库分表
    本文目录一、数据库瓶颈IO瓶颈CPU瓶颈二、分库分表水平分库水平分表垂直分库垂直分表三、分库分表工具四、分库分表步骤五、分库分表问题非partit ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
author-avatar
庄乐星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有