如何在此插入SQL中添加查询提示?

时间:2017-05-10 08:00:50

标签: sql sql-server tsql

我们的SQL Server从2012年升级到2014年后,某些存储过程的性能下降了。

我们发现query hint可用于解决此问题,但我想知道如何在以下结构的SQL中添加查询提示:

INSERT INTO TABLE1 ....
    SELECT ...
    FROM TABLE2
    --OPTION (QUERYTRACEON 9481)

如果我只是将其添加到代码段的末尾(注释行),是否会影响SELECT查询,INSERT查询或两者兼而有之?如果我只想在SELECTINSERT上使用查询提示呢?

2 个答案:

答案 0 :(得分:1)

如果您使用此跟踪标志,那么您所做的是指示查询优化器使用2012基数估算器。 您可以按照documentation

中的说明在查询级别执行此操作
  

如果跟踪标志以不需要的方式影响任何查询执行计划,   但是改进了其他一些查询执行计划,你可能想要启用一个   仅针对特定查询的相应跟踪标志。

如果您现在正在使用它,它将影响整个INSERT INTO SELECT语句,但如果您只想使用旧的基数估算器执行其中一个查询,则需要更改语句分成两个不同的查询(例如将数据插入临时表,然后选择进入表格),以便您只在其中一个查询中使用跟踪。

您可以在此StackOverflow post上阅读有关此内容的更多信息。

答案 1 :(得分:0)

跟踪标志9481强制查询优化器在创建查询计划时使用基数估算器的版本70(SQL Server 2012版本)(msdn) 它肯定会影响查询中的所有操作,包括插入和选择,但是在插入操作符中您可能会有什么不同? 基数估计会影响连接策略,而插入不会执行ani scan / seek / join