Tsql 临时表中日期相同的不同执行计划
基本上,我有一个临时表,我使用不同的技术用相同的数据填充该表,以便在我的例子中找到最快的一个。这三种方法是:Tsql 临时表中日期相同的不同执行计划,tsql,sql-server-2012,temp-tables,Tsql,Sql Server 2012,Temp Tables,基本上,我有一个临时表,我使用不同的技术用相同的数据填充该表,以便在我的例子中找到最快的一个。这三种方法是: 选择使用联接插入的信息 选择插入的信息,其中大多数 表/逻辑/计算包含在内联函数中 选择插入的信息,其中大多数 表/逻辑/计算包含在表值函数中 每种方法都使用相同的数据填充表,我使用表值函数获得最佳性能。但这里的情况很奇怪 填充临时表后,将对其执行简单的选择,并在所有列上显示GROUP BY和ORDER BY。因为数据是相同的,所以我期望有相同的执行计划,但我得到以下结果: 其中第一行
注意,由于这与排序和分组依据的数据有关,因此我假设当我使用表值函数时,可能日期已经排序,但简单地选择结果显示,在每种情况下,数据的排序方式都是相同的。执行计划不仅仅是数据 看看 类似的东西不是可搜索的,将创建一个次优计划
where year(payment_dt) = year(getDate())
and month(payment_dt) = month(getDate())
优化器将为以下各项创建最佳计划:
where payment_dt >= dateadd(mm, datediff(mm, 0, getdate())+0, 0)
and payment_dt < dateadd(mm, datediff(mm, 0, getdate())+1, 0)
其中payment\u dt>=dateadd(mm,datediff(mm,0,getdate())+0,0)
和付款_dt
这两个将返回相同的行,一个将使用seek,另一个将使用scan,因为函数是围绕列使用的哇,在查询优化器出现之前的几天,您应该已经出现过了。查询优化器只能在查询结构中运行。你今天仍然可以做提示。join、exists和intersect都可以是具有不同查询计划的等效查询。在这种情况下,我将重点介绍最后一个SELECT,其目的是使用ORDER BY和GROUP BY子句显示临时表中的所有记录。因为我有同样的信息,我期待着同样的计划。我不是在比较我使用不同方法的陈述的第一部分,所以不清楚。您的问题是关于一个您甚至没有发布的select语句?我怀疑用group by和order by子句显示普通select语句是否非常有用?