Sql Server最有效的加入方式

时间:2010-08-06 11:09:50

标签: .net sql sql-server

我有一个大约有3000条记录的表,我需要将其导出到csv(通过.net Web应用程序)但是我还需要从大约10个其他表中提取信息(每个大约还有3000条记录),这样表单更多列,例如

Individual Table
Organisation Table
IndividualOrganisation Table

输出:     Individual.Name,Organisation.Name

目前我正在使用存储的进程创建一个带有额外列的临时表(例如,一个用于Organisation.Name等...)然后从其他10个表中一个接一个地进行查询以将信息输入。这会导致即使我将时间延长到200,也会在sql连接上发生超时时间错误!

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

4 个答案:

答案 0 :(得分:7)

只有3000条记录,我认为除非您的服务器功能严重不足(或过度工作),否则几乎所有查询都可以正常运行。

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

答案 1 :(得分:1)

对于许多单独的查询,优化程序只能查看工作负载的一小部分。单个查询允许SQL Server优化整体。这通常会更快。

您可以通过将查询的部分移动到视图中来保持新查询的可读性。视图就像SQL宏一样,SQL Server使用视图优化查询,就好像视图被扩展为SQL一样。

答案 2 :(得分:0)

  • 检查所有外键主键索引以及用于过滤的 strong>(在WHERE子句之后)。

  • 仅从每个表中选择所需的字段。

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

答案 3 :(得分:0)

每个表只有3000条记录,索引应该是无关紧要的 - 进行全表扫描应该比通过索引访问更快。

我建议您逐个删除查询,直到可以找出导致超时问题的查询。