SQL 2017 - 新功能






4.99/5 (17投票s)
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 查询执行的正常优化流程吗?如果不知道,请检查以下步骤
- 最初,查询优化器会为给定查询计算所有可行的查询执行计划。
- 然后它会选择成本最低/速度最快的计划。
- 最后,优化器将选择估计成本最低的计划来执行查询,然后开始执行。
现在在这个过程中,存在一些缺点
- 如果估计成本最低的执行计划出错,则会影响性能。
- 如果分配的内存不足以进行处理,则会导致溢出到磁盘。
- 如果分配的内存大小不正确,则会导致内存浪费。
为了克服所有这些问题,您可以使用此 SQL 2017 功能。
1. 批处理模式内存授予反馈
此反馈(技术)会重新计算执行计划(实际)所需的内存,并从缓存中授予。
2. 批处理模式自适应联接
为了更快地执行计划,它具有哈希联接和嵌套循环联接,在扫描执行计划的第一个输入后,它会决定使用哪个联接以最优速度生成输出。
3. 交错执行
在交错执行中,如果遇到多语句表值函数,它会在优化执行计划中“暂停”。然后,它只需计算正确的基数,然后恢复优化。
自动调优
顾名思义,此功能会检查查询性能问题,识别它们,并使用推荐的解决方案来修复它们。此功能中有几种自动调优技术可用
- 自动更正(计划)
- 自动管理(索引)
自动更正(计划)
此计划在 SQL 2017 DB 中可用,它基本上会扫描有问题的计划(从性能角度),然后使用推荐的解决方案进行修复。
自动管理(索引)
此功能在 SQL 2017 Azure DB 中可用,它基本上会识别和更正索引的顺序。已删除的索引和已添加的索引。
图数据库
图数据库功能是 SQL 2017 中新引入的功能。
什么是图数据库?
基本上,它是边和节点的集合,其中边是节点之间的关系,节点只是一个实体,因此单个边可以连接多个节点。图数据库的功能类似于关系数据库,您可以在以下情况下使用图数据库
- 如果您拥有分层格式的数据,并且希望为节点保存多个父节点
- 如果您需要检查和分析相互关联的关系和数据
- 如果您有多对多关系
在此,关键字 MATCH
用于查询图表并对数据进行排序,用户只需通过一个查询即可跨图和关系数据进行查询,更多详情,请查看 [此处]。
始终可用(跨数据库访问)
借助此功能,现在可以针对不同的 SQL 实例(可以连接相同 SQL 实例到不同实例)进行跨数据库事务。它还支持数据库分布式事务。[SQL 2016 也支持跨数据库访问,但仅限于同一个 SQL 服务器实例。]
DTA 改进
在 SQL 2017 中,**数据库调优顾问** (DTA) 的性能得到了改进,并增加了调优顾问的其他选项。
** 对于那些不知道数据库调优顾问是什么的人:
它是一个数据库引擎,它检查(已处理的)查询,然后以一种可以提高其性能的方式提出建议,可能是通过更改数据库结构(例如索引、键)。有几种方法可以使用它
- 使用 GUI(界面)
- 使用命令行实用程序
如果您想了解更多关于它的信息,您可以在此查看。
新的字符串成员(函数)
SQL 2017 引入了一些新的 string
函数,例如 TRANSLATE
、CONCAT_WS
、STRING_AGG
、TRIM
。让我们逐一看看。
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
的末尾添加分隔符。输入可以是 VARCHAR
、NVARCHAR
,您还可以使用 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 使用以下解决方案。
revoscalepy
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 还有很多值得讨论和学习的内容,我们将在本文的下一版本中继续这段旅程,在此之前,请尽情享受。建议和查询始终受欢迎。
祝你查询愉快!