我有一个大约有3000条记录的表,我需要将其导出到csv(通过.net Web应用程序)但是我还需要从大约10个其他表中提取信息(每个大约还有3000条记录),这样表单更多列,例如
Individual Table Organisation Table IndividualOrganisation Table
输出: Individual.Name,Organisation.Name
目前我正在使用存储的进程创建一个带有额外列的临时表(例如,一个用于Organisation.Name等...)然后从其他10个表中一个接一个地进行查询以将信息输入。这会导致即使我将时间延长到200,也会在sql连接上发生超时时间错误!
在我的存储过程中构造一个庞大的单个sql语句并执行它会更好吗?这些“加入”的10个表是以用户选择为条件的,存储过程当前具有ifs序列,然后选择
答案 0 :(得分:7)
只有3000条记录,我认为除非您的服务器功能严重不足(或过度工作),否则几乎所有查询都可以正常运行。
你有适当的索引吗?这就是我先要检查的内容。
答案 1 :(得分:1)
对于许多单独的查询,优化程序只能查看工作负载的一小部分。单个查询允许SQL Server优化整体。这通常会更快。
您可以通过将查询的部分移动到视图中来保持新查询的可读性。视图就像SQL宏一样,SQL Server使用视图优化查询,就好像视图被扩展为SQL一样。
答案 2 :(得分:0)
检查所有外键,主键的索引以及用于过滤的> strong>(在WHERE子句之后)。
仅从每个表中选择所需的字段。
您可以使用INSERT...SELECT语句在一个查询中完成所有操作。
答案 3 :(得分:0)
每个表只有3000条记录,索引应该是无关紧要的 - 进行全表扫描应该比通过索引访问更快。
我建议您逐个删除查询,直到可以找出导致超时问题的查询。