65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL 2017 - 新功能

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.99/5 (17投票s)

2017年10月31日

CPOL

9分钟阅读

viewsIcon

37959

SQL 2017新功能

背景

SQL Server 2017 于 2017 年 10 月发布(通用可用版本)(真的吗?我们还在努力理解 SQL 2016 的特性,好吧,开个玩笑 :)) SQL 2017 分批发布,第一部分,即 SQL 2017 CTP 1.0(SQL 版本 14.0.1.246)于 2016 年 11 月发布(怎么能在 2016 年发布 2017 版本?)。到目前为止,SQL 2017 已发布 10 个版本,当前版本是 SQL 2017 Release GA(SQL 版本 14.0.1000.169)(在此查看),2017 年 10 月发布的可用版本。

(**在此查看 SQL 2016 的新特性。)

引言

此版本的 SQL 主要连接到 Linux,并将 SQL 的强大功能引入 Linux。简而言之,现在您可以在 Linux 上安装 SQL 2017(这是一个伟大的举措),此外,SQL 还可以用于基于 Linux 的 Docker 容器。在此版本中,SQL 为您提供了开发语言选择,您可以在本地或云端进行开发。

在此版本中,SQL 还改进了其各个部分(如数据库引擎、集成服务、主数据服务、分析服务等)的性能、可伸缩性和功能。在本文中,我们将逐一探讨它们。

以下是一些数据库引擎的新特性。

identity_cache

此选项有助于避免在服务器意外关闭、发生故障转移或甚至切换到某些辅助服务器的情况下,标识列值出现不一致。此选项与 'ALTER DATABASE SCOPED CONFIGURATION' 语句一起使用。此语句用于启用数据库配置设置。语法如下

ALTER DATABASE SCOPED CONFIGURATION
{      
     {  [ FOR SECONDARY] SET <set_options>  }  
}
| CLEAR PROCEDURE_CACHE
| SET < set_options >
[;]  

< set_options > ::=  
{
    MAXDOP = { <value> | PRIMARY}  
    | LEGACY_CARDINALITY_ESTIMATION = { ON | OFF | PRIMARY}  
    | PARAMETER_SNIFFING = { ON | OFF | PRIMARY}  
    | QUERY_OPTIMIZER_HOTFIXES = { ON | OFF | PRIMARY}
    | IDENTITY_CACHE = { ON | OFF }
}

自适应查询处理改进

您想提高查询执行性能吗?那么这个特性将为您提供帮助。SQL Server 和 Azure SQL 数据库都支持此特性。

您知道 SQL 查询执行的正常优化流程吗?如果不知道,请检查以下步骤

  1. 最初,查询优化器会为给定查询计算所有可行的查询执行计划。
  2. 然后它会选择成本最低/速度最快的计划。
  3. 最后,优化器将选择估计成本最低的计划来执行查询,然后开始执行。

现在在这个过程中,存在一些缺点

  1. 如果估计成本最低的执行计划出错,则会影响性能。
  2. 如果分配的内存不足以进行处理,则会导致溢出到磁盘。
  3. 如果分配的内存大小不正确,则会导致内存浪费。

为了克服所有这些问题,您可以使用此 SQL 2017 功能。

1. 批处理模式内存授予反馈

此反馈(技术)会重新计算执行计划(实际)所需的内存,并从缓存中授予。

2. 批处理模式自适应联接

为了更快地执行计划,它具有哈希联接和嵌套循环联接,在扫描执行计划的第一个输入后,它会决定使用哪个联接以最优速度生成输出。

3. 交错执行

在交错执行中,如果遇到多语句表值函数,它会在优化执行计划中“暂停”。然后,它只需计算正确的基数,然后恢复优化。

自动调优

顾名思义,此功能会检查查询性能问题,识别它们,并使用推荐的解决方案来修复它们。此功能中有几种自动调优技术可用

  1. 自动更正(计划)
  2. 自动管理(索引)

自动更正(计划)

此计划在 SQL 2017 DB 中可用,它基本上会扫描有问题的计划(从性能角度),然后使用推荐的解决方案进行修复。

自动管理(索引)

此功能在 SQL 2017 Azure DB 中可用,它基本上会识别和更正索引的顺序。已删除的索引和已添加的索引。

图数据库

图数据库功能是 SQL 2017 中新引入的功能。

什么是图数据库?

基本上,它是边和节点的集合,其中边是节点之间的关系,节点只是一个实体,因此单个边可以连接多个节点。图数据库的功能类似于关系数据库,您可以在以下情况下使用图数据库

  1. 如果您拥有分层格式的数据,并且希望为节点保存多个父节点
  2. 如果您需要检查和分析相互关联的关系和数据
  3. 如果您有多对多关系

在此,关键字 MATCH 用于查询图表并对数据进行排序,用户只需通过一个查询即可跨图和关系数据进行查询,更多详情,请查看 [此处]。

始终可用(跨数据库访问)

借助此功能,现在可以针对不同的 SQL 实例(可以连接相同 SQL 实例到不同实例)进行跨数据库事务。它还支持数据库分布式事务。[SQL 2016 也支持跨数据库访问,但仅限于同一个 SQL 服务器实例。]

DTA 改进

在 SQL 2017 中,**数据库调优顾问** (DTA) 的性能得到了改进,并增加了调优顾问的其他选项。

** 对于那些不知道数据库调优顾问是什么的人:

它是一个数据库引擎,它检查(已处理的)查询,然后以一种可以提高其性能的方式提出建议,可能是通过更改数据库结构(例如索引、键)。有几种方法可以使用它

  • 使用 GUI(界面)
  • 使用命令行实用程序

如果您想了解更多关于它的信息,您可以在此查看

新的字符串成员(函数)

SQL 2017 引入了一些新的 string 函数,例如 TRANSLATECONCAT_WSSTRING_AGGTRIM。让我们逐一看看。

TRANSLATE

它基本上以 string 作为输入,然后将字符翻译成一些新字符,请参见下面的语法

TRANSLATE ( inputString, characters, translations)

在上面的语法中,'characters' 的长度应与 'translations' 相同,否则上述函数将返回错误。

例如:

TRANSLATE ('6*{10+10}/[6-4]','[]{}','()()')

上面示例的输出将是 6*(10+10)/(6-4)

因此,我们可以看到花括号方括号被翻译成了圆括号。

[此函数与 REPLACE 的功能相同,但比 REPLACE 更易于使用。如果我们想使用 REPLACE 获得相同的输出,那么我们需要这样写,这很难理解。

SELECT REPLACE(REPLACE(REPLACE(REPLACE('6*{10+10}/[6-4]','{','('), '}', ')'), '[', '('), ']', ')');

CONCATE_WS

它仅使用指定的输入分隔符连接所有输入参数。请参见下面的语法

CONCAT_WS ( separator, argument1, argument1 [, argumentN]… )

它通过分隔符连接所有参数来生成单个 string,它需要最少 2 个参数才能生成输出,否则将抛出错误。

例如

SELECT CONCAT_WS(',','Count numers', 'one', 'two', 'three', 'four' ) AS counter;

上述语法的输出将是

one, two, three, four

您也可以使用数据库列名而不是硬编码的 string

TRIM

(最后 :)) SQL 2017 引入了这个新函数。它的功能与 C# 的 trim 函数相同,它会删除 string 开头和结尾的所有空格。语法如下

SELECT TRIM('     trim me    ') AS result;

上述语法的输出将是

trim me

此函数不会删除 string 中间的空格。

STRING_AGG

它使用分隔符连接 string 的值,并且不在 string 的末尾添加分隔符。输入可以是 VARCHARNVARCHAR,您还可以使用 WITHIN GROUP 子句选择性地指定结果的顺序。

请参见下面的语法

STRING_AGG ( expression, separator ) [ <order_clause> ]

<order_clause> ::=  
    WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )

请查看下面的示例

SELECT city,
    STRING_AGG (name, ';') WITHIN GROUP (ORDER BY name ASC) AS names
FROM Students GROUP BY city;

在上面的示例中,我们使用分号 ( ; ) 分隔所有名称。WITHIN GROUP 帮助我们进行排序。输出将显示如下

城市 Names
City 1 name1;name2;name3;name4;name5;
City 2 name1;name2;name3;name4;

SQL 2017 中 SSRS(Reporting Services)的新特性

  • 从现在开始,SQL Server 安装程序中不再提供 SSRS 安装程序,您需要从下载中心 [此处] 下载。
  • 现在,查询设计器支持 DAX,现在可以针对 SSAS(Analysis Services)创建原生 DAX 查询,这是 SQL 工具和报表生成器最新版本的一部分。
  • SSRS 现在支持符合 OpenAPI 的 RESTful API,API 可以在 此处找到。
  • 您现在可以向您的评论添加附件。
  • 您可以向报表添加评论。
  • 报表服务 Web 门户的改进(此功能已在 SQL 2016 中提供)

SQL 2017 中 SSIS(Integration Services)的新特性

  • 您现在可以在 Linux 上执行 SSIS 包,此外,现在可以在 Linux 上进行数据加载、提取和转换。
  • Scale out 功能允许在多台机器上执行复杂的集成,具有高性能的包执行,甚至可以执行多个包执行请求。Scale out 管理通过 Scale Out Master 和 Scale Out Workers 进行所有操作,更多详情,请在此查看
  • Microsoft DAX 和 CRM Online 现在支持 ODataConnection 管理器和 oDataSource

SQL 2017 中 SSAS(Analysis Services)的新特性

  • SQL 2017 中引入了新的“获取数据”界面,该界面与 MS Excel、Power BI 类似,它还提供数据转换和数据合并功能,您可以通过使用查询生成器和 M 表达式来完成。
  • SSAS 的表格模式在 SQL 2012 中引入,现在在 SQL 2017 中变得更加强大。
  • SQL 2017 带有新的“编码提示”功能,用于优化大型内存表格数据。
  • Power PIVOT 的性能改进

有关 SQL 2017 中 SSAS 的更多信息,请在此切换

机器学习

我们知道 SQL 2016 现在支持 R 服务,它现在已更名为 SQL Server 机器学习服务。借助此功能,您可以使用 SQL Server 轻松使用 R 或 Python 脚本。

在此新功能中,Python 可以在存储过程中运行,甚至可以使用 SQL Server 远程执行它,这对 Python 开发人员来说非常有帮助。

目前,此功能不支持 Linux,我们需要等待后续公告。

为了智能而强大地使用机器学习,SQL 使用以下解决方案。

  1. revoscalepy
  2. microsoftml

revoscalepy 是一个新的库,为高性能算法、计算和远程上下文提供基础,它基本上基于 RevoScaleR(它是 R 服务的一个包)。

microsoftml 是 Microsoft R 服务器包,它支持机器学习算法。Microsoft 开发此库是为了内部机器学习,但多年来,它得到了改进,并支持快速数据流、大型文本转换等。

Linux 支持

基本上,此版本的主要目标是在 Linux 上发布产品,此版本的 SQL 以“SQL 2017 on Linux and Windows”的名称发布,以下是“SQL on Linux”的一些关键特性

  • 核心数据库引擎功能
  • 支持 IPV6
  • NFS 支持
  • Linux 上的 AD 身份验证
  • 加密支持
  • 可以在 Linux 上安装 SSIS 包
  • 命令行配置工具 MSSQL-conf 可用
  • 无缝且无需人工干预的安装
  • 用于 Visual Studio Code 的 SQL(VS Code 已在 Linux 上提供)
  • 跨平台脚本生成器

要了解更多关于 SQL on Linux 的信息,请在此切换

参考文献

最后

关于 SQL Server 还有很多值得讨论和学习的内容,我们将在本文的下一版本中继续这段旅程,在此之前,请尽情享受。建议和查询始终受欢迎。

祝你查询愉快!

© . All rights reserved.