热门标签 | 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

推荐阅读
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍了在 Spring Boot 中使用 JPA 进行数据删除操作时遇到的 SQL 错误及其解决方法。错误表现为:删除操作失败,原因是无法打开 JPA EntityManager 以进行事务处理。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • BIEE中的最终用户界面被称为Presentation Layer(展现层)。展现层呈现的内容与用户在Web报表开发界面中看到的一致,使用业务语言进行描述,隐藏了技术细节,如星型模型。本文将详细介绍展现层的设计要点及其与业务模型层的关系。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
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社区 版权所有