包括临时表中的值会减慢查询速度
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 列上有一个索引,当然不需要主键。我完全被难住了..以上是关于包括临时表中的值会减慢查询速度的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MYSQL 更高的 LIMIT 偏移量会减慢查询速度?