2010-08-06 57 views
0

我有一张约3000条记录的表格,我需要将其导出到csv(通过.net Web应用程序),但是我也需要从大约10个表中提取信息(约3000条记录每个),使表格更多列,例如Sql Server最有效的加入方式

 
Individual Table 
Organisation Table 
IndividualOrganisation Table 

输出: Individual.Name,Organisation.Name

目前我使用一个存储proceedure创建临时表与额外的列(例如,一个用于Organisation.Name等...),那么即使我将时间延长到200,也会导致SQL连接超时期间过去的错误!

在我的存储过程中构建一个大规模的单个sql语句并执行它会更好吗?这10个'加入'的表是以存储过程的用户选择为条件的,当前有ifs序列,然后选择

回答

7

只有3000条记录我认为几乎任何查询都可以正常运行,除非你的服务器严重不足(或过度劳累)。

你有适当的索引吗?这是我首先要检查的。

+0

有10行3000行的表格。如果你只是加入他们,你会得到3000^10行。这是一个有34个零的数字。 :) – Andomar 2010-08-06 11:17:08

+0

@Andomar:不,你会得到3000行,平均每列多10倍。 – 2010-08-06 11:18:57

+1

只有当你在所有表格之间进行笛卡尔连接时,我怀疑你是真正想要做什么。 – 2010-08-06 11:22:02

1

对于许多分离的查询,优化器只能查看工作负载的一小部分。一个查询允许SQL Server优化整体。这通常会以更快的速度结束。

通过将查询的各个部分移动到视图中,您可以保持新查询的可读性。视图就像SQL宏一样,而且SQL Server优化视图的查询,就像视图扩展到SQL一样。

0
  • 检查是否有用于过滤所有外键主键和列指标(WHERE子句后)。

  • 只从每个表中选择您需要的字段。

  • 您可以使用INSERT...SELECT语句在一个查询中完成所有操作。

0

每张表只有3000条记录,索引应该是无关紧要的 - 它应该是更快的做全表扫描,而不是通过索引访问。

我建议您尝试逐个删除查询,直到可以确定哪个查询导致超时问题。