0

我有一个相当复杂的多连接 TSQL SELECT 查询,它运行大约 8 秒并返回大约 30 万条记录。这是目前可以接受的。但是我需要多次重复使用该查询的结果,所以我将查询的结果插入到临时表中。表是预先创建的,其列与 SELECT 查询的输出相匹配。但是,只要我执行 INSERT INTO ... SELECT - 执行时间就会增加一倍以上,超过 20 秒!执行计划显示,46% 的查询成本用于“表插入”,38% 用于表假脱机(Eager Spool)。

知道为什么会发生这种情况以及如何加快速度吗?

谢谢!

4

3 回答 3

1

根据您提供的信息,我可以提出一些建议。如果您不关心脏读,您可以随时更改事务隔离级别(如果您使用的是 MS T-SQL)

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
select ...

这可能会加快您的初始查询速度,因为不需要对您查询的数据进行锁定。如果您不使用 SQL Server,请在 Google 上搜索如何使用您正在使用的技术执行相同的操作。

对于插入部分,您说您正在插入临时表。您的数据库是否支持在临时表上添加主键或索引?如果是这样,则在其中有一个作为索引列的虚拟列。另外,您是否尝试过使用常规数据库表?根据您的设置,使用它可能会加快您的插入时间。

于 2012-04-05T20:14:26.380 回答
1

“为什么”很难说,我们需要更多的信息。(尽管我的 SWAG 与日志记录有关……)

但是,10 次中有 9 次的解决方案是使用 SELECT INTO 来制作您的临时表。

于 2012-04-05T19:00:33.833 回答
1

我将从查看标准调整项目开始。磁盘在执行吗?是否有足够的资源(IO、RAM、CPU 等)?RDBMS 中是否存在瓶颈?听起来像问题,但锁定发生了什么?其他代码是否给出类似的结果?其他代码是否有效?

于 2012-04-05T19:44:37.320 回答