Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用由insert into创建的表时,什么会导致查询时间过长?_Sql Server_View_Sql Insert_Sql Server 2016 - Fatal编程技术网

Sql server 使用由insert into创建的表时,什么会导致查询时间过长?

Sql server 使用由insert into创建的表时,什么会导致查询时间过长?,sql-server,view,sql-insert,sql-server-2016,Sql Server,View,Sql Insert,Sql Server 2016,因此,我们的情况是,我们希望从客户机数据库中检索一些表来进行分析(这是数据库中2500个表中的20个)。我已经编写了一个脚本,并创建了一些说明(请参阅关于我是如何做到这一点的答案),以便让客户端设置一个新的数据库,并使用要使用insert into的脚本,以便将所有表移动到此新数据库(然后它们将备份并发送给我们) 我用一个数据库完成了这项工作,并且一切都很好,但是,当我使用第二个数据库(不同的数据库结构,因此修改了脚本)时,我遇到了问题。脚本运行良好,然后我可以看到表中的所有数据,然后我可以创建

因此,我们的情况是,我们希望从客户机数据库中检索一些表来进行分析(这是数据库中2500个表中的20个)。我已经编写了一个脚本,并创建了一些说明(请参阅关于我是如何做到这一点的答案),以便让客户端设置一个新的数据库,并使用要使用insert into的脚本,以便将所有表移动到此新数据库(然后它们将备份并发送给我们)

我用一个数据库完成了这项工作,并且一切都很好,但是,当我使用第二个数据库(不同的数据库结构,因此修改了脚本)时,我遇到了问题。脚本运行良好,然后我可以看到表中的所有数据,然后我可以创建一组视图(在单独的数据库上),但是有一个特定的视图(出于保密原因,我不能在这里共享代码)运行大约需要4.5到5分钟(这是我在SSMS中使用右键单击并选择前1000行的时候)

奇怪的是,使用与创建视图完全相同的代码,但指向原始数据库而不是使用insert-into创建的数据库,运行需要5秒钟。因此,当我使用insert-into时,必须发生一些事情。应该不需要遇到索引等(数据库不使用关系,这些关系是在应用程序内部创建的),因此不确定还要去哪里查找

我已经用SQL设置了视图,有两个部分我可以禁用以使其正常工作,奇怪的是我可以注释掉任何一个部分,它正常工作,但这两个部分没有任何关系(查看不同的字段等)。似乎完全是随机的,可能是SQL server中的故障?我们正在使用最新的SQL server 2016


是否有其他人对“插入到”结果有类似的问题?

因此,在运行执行计划后,我开始重新添加主键,并发现一个特定的表在未指定主键时终止了执行时间(没有一个表会像我使用插入到时那样)。我建议将来的任何人,将原始数据库中的数据与主键进行比较,并将其复制到插入的数据库中,直到减少视图加载时间。希望这能对将来的人有所帮助。

SQL Server性能问题通常无法得到回答,它们总是针对特定的查询和数据库配置。您最好的选择是生成执行计划,并查看SQL Server在何处花费时间。一旦问题变得更具体,您可能会在OK找到更好的专业知识,在这两个视图上都完成了执行计划并进行了比较,它们看起来很相似。插入丢失了一些键,因此我开始查找缺少的dex part和添加键返回,发现有一个表在未指定主键时产生了影响。这是一个主键无论如何都不重要的表,但我将手动指定它。谢谢。您不能只是将数据转储到堆中并期望良好的性能。这是一个明显的起点(如您所了解的)是创建与源数据库相同的索引。但之后可能需要进行调整。您实际上不需要PKs和FKs,但需要关联的索引。