包括临时表中的值会减慢查询速度

Posted

技术标签:

【中文标题】包括临时表中的值会减慢查询速度【英文标题】:Including value from temp table slows down query 【发布时间】:2011-06-07 17:41:52 【问题描述】:

我有一个存储过程,它使用临时表在 select 子句中进行一些连接。 select 子句包含临时表的 Id 列中的值,如下所示:

CREATE TABLE #TempTable 
(
Id INT PRIMARY KEY,
RootVal INT
)

Select 看起来像这样:

Select value1, value2, #TempTable.Id AS ValKey 
  From MainTable INNER JOIN #TempTable ON  MainTable.RootVal = #TempTable.RootVal 

查询需要一分钟才能在现实生活中运行,但如果我从选择列表中删除“#TempTable.Id”,它会在一秒钟内运行。

与仅在联接中使用它相比,有谁知道为什么包含 #temp 表中的值会产生如此巨大的成本?

【问题讨论】:

多少行?临时表上的索引? MainTable.RootVal 数据类型? 大约 500000,是的,临时表中的 RootVal 以及 MainTable.RootVal 上都有索引。我要重做它,所以我不需要从 tamp 表中获取值,但我根本无法理解问题所在。 可以添加查询计划吗? 【参考方案1】:

最有可能:

数据类型不匹配 例如 nvarchar 与 int

MainTable.RootVal 上缺少索引 为什么将Id 设置为 PK,然后在另一列上加入?

【讨论】:

它的 int 无处不在,我在临时表的 RootVal 列上有一个索引,当然不需要主键。我完全被难住了..

以上是关于包括临时表中的值会减慢查询速度的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 日期范围函数减慢查询速度

为啥 MYSQL 更高的 LIMIT 偏移量会减慢查询速度?

MongoDB,即使它们形成分区,查询字段也会减慢查询速度吗?

中小型表上的左连接非常慢

如何减慢postgresql服务器的速度?

与大表的内部联接减慢查询