云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

对象存储_徐州市城乡建设局网站_企业级

小七 141 0

Azure SQL数据库中的跨数据库查询

注意:azuresqldatabaseelasticqueryoverview(preview)文档包含关于弹性数据库查询的最新和最相关的信息。我们很高兴地宣布对azuresql数据库中的弹性数据库查询进行了一些重大的改进。最值得注意的是,弹性数据库查询现在支持在azuresql数据库中跨数据库查询。这使得常见的跨数据库查询任务成为可能,比如从远程表选择到本地表。它还允许更丰富的远程数据库查询拓扑,如下图所示,其中许多数据库需要访问彼此的表。这种新的跨数据库查询功能补充了弹性数据库查询对水平分区(sharding)的现有支持,如下图所示。与sqlserver内部部署不同,azuresql数据库中的弹性数据库查询现在在一个共同的概念和相同的表面积下统一了垂直和水平分区。弹性数据库查询预览最新更新的增强功能包括:改进了对不涉及切分的常见跨数据库查询场景的支持,弹性查询现在可用于标准和高级性能层,灵活的DDL现在允许模式和表名别名来表示远程数据库表,对于引用远程表时涉及T-SQL参数的查询,性能得到显著提高,从远程数据库检索大量行的查询的性能改进,sp_execute_fanout过程中的参数支持。有关这些增强功能的详细信息,请参见以下段落。查询远程数据库弹性数据库查询现在通过外部数据源和外部表的DDL中的一个简单扩展提供对远程azuresql数据库中表的访问。您可以定义一个外部数据源,例如,它提供对远程数据库的访问,该数据库存储在数据层的所有数据库之间共享的引用数据。您还可以使用INSERT INTO轻松地将表的内容从远程数据库复制到另一个数据库。。。选择语句。引用单个远程数据库的外部数据源通过使用以下DDL语句的TYPE子句中的RDBMS选项来标识:创建外部数据源RemoteReferenceData与(类型=RDBMS,位置='myserver.database.windows.net',DATABASE_NAME='ReferenceData',凭证=SqlUser);基于此外部数据源,您现在可以定义一个外部表,该表提供对ReferenceData数据库中ZIP codes表的远程访问。创建外部表[dbo].[zipcode]([zc_id]int不为空,[zc_cityname]nvarchar(256)空,[zc_zipcode]nvarchar(20)不为空,[zc_country]nvarchar(5)不为空)与(数据源=远程引用数据);在这个简单的一次性设置之后,您的查询现在可以从定义了外部数据源和外部表的任何azuresql数据库访问远程邮政编码表。跨更多性能层的可用性弹性数据库查询现在也可以在azuresql数据库的标准性能层中使用。这大大降低了azuresql数据库中跨数据库查询和分区场景的输入成本。由于标准层中的DTU限制较小,所以在运行第一个远程数据库查询时,初始化弹性数据库查询可能需要一分钟的时间。弹性数据库查询的初始化延迟是我们正在积极研究的一个领域。在接下来的几个月里,这种体验会有所改善。更灵活的命名一些重要的场景需要能够以不同于远程数据库上原始表的名称命名外部表。任何已经存在与远程表同名的本地表的情况都是这种情况的例子。所有这些方案都要求能够为远程表名使用别名。例如,考虑一个场景,您希望外部表定义跨水平分区(分片)数据层聚合DMV(动态管理视图)。以前,这需要复杂的解决方法,例如使用远程数据库上的视图有效地重命名DMV,并从外部表定义中引用视图。这是必要的,因为DMV名称或目录名称已经在本地存在,不能直接用作外部表名。现在,您可以使用任何名称作为外部表名,并使用外部表DDL上的新OBJECT_SCHEMA和OBJECT_name子句标识底层远程表。这使得跨dmv或扩展数据层的目录视图查询变得很容易,如下例所示。以下DDL(数据定义语言)执行外部数据源和外部表的一次性设置。请注意在外部表定义中使用了OBJECT_SCHEMA和OBJECT_NAME子句:创建外部数据源MyExtSrc与(类型=碎片地图管理器,位置='myserver.database.windows.net',DATABASE_NAME='ShardMapDatabase',凭证=SMMUser,SHARD_MAP_NAME='ShardMap'); 创建外部表[dbo].[所有的\u dm_exec_请求]([session_id]smallint不为空,[request_id]int不为空,[开始时间]日期时间不为空,[状态]nvarchar(30)不为空,[命令]nvarchar(32)不为空,[sql_handle]varbinary(64),[语句开始偏移量]int,[语句结束偏移量]int,[cpu时间]int不为空)与(数据源=MyExtSrc,架构名称='sys',OBJECT_NAME='dm_exec_请求',分配=循环);现在,您可以通过一个简单的弹性数据库查询检索整个数据层中最昂贵的请求,如下所示:选择前10名[请求_id],[开始时间][状态],[命令]从所有的执行请求按[cpu时间]说明订购sp_execute_fanout的新签名弹性数据库查询提供存储过程sp_execute_fanout来调用远程数据库上的存储过程和函数。我们最近对azuresql数据库进行了改进,现在将sp_execute_fanout的签名与熟悉的sp_executesql签名对齐。这允许将常规SQL参数传递到sp_execute_fanout的调用中,并将于下周早些时候提供。性能改进以前,弹性数据库查询无法将参数化操作推送到远程数据库。因此,有时为了评估这些操作,必须不必要地将大型行集带到本地。通过最近的改进,现在可以将参数化操作推送到远程数据库并进行远程评估。对于像下面这样的外部表和本地表的查询,现在可以通过计算远程数据库上WHERE子句中的选择性筛选器来避免传输数百万行:声明@low int声明@high int设置@低=100设置@高=200选择c.CustomerId、c.Name、count(OrderId)来自远程客户c加入本地_订单o在c.CustomerId=o.CustomerId上其中c.CustomerId>@low和c.CustomerId