我们的SQL Server从2012年升级到2014年后,某些存储过程的性能下降了。
我们发现query hint可用于解决此问题,但我想知道如何在以下结构的SQL中添加查询提示:
INSERT INTO TABLE1 ....
SELECT ...
FROM TABLE2
--OPTION (QUERYTRACEON 9481)
如果我只是将其添加到代码段的末尾(注释行),是否会影响SELECT
查询,INSERT
查询或两者兼而有之?如果我只想在SELECT
或INSERT
上使用查询提示呢?
答案 0 :(得分:1)
如果您使用此跟踪标志,那么您所做的是指示查询优化器使用2012基数估算器。 您可以按照documentation:
中的说明在查询级别执行此操作如果跟踪标志以不需要的方式影响任何查询执行计划, 但是改进了其他一些查询执行计划,你可能想要启用一个 仅针对特定查询的相应跟踪标志。
如果您现在正在使用它,它将影响整个INSERT INTO SELECT
语句,但如果您只想使用旧的基数估算器执行其中一个查询,则需要更改语句分成两个不同的查询(例如将数据插入临时表,然后选择进入表格),以便您只在其中一个查询中使用跟踪。
您可以在此StackOverflow post上阅读有关此内容的更多信息。
答案 1 :(得分:0)
跟踪标志9481强制查询优化器在创建查询计划时使用基数估算器的版本70(SQL Server 2012版本)(msdn) 它肯定会影响查询中的所有操作,包括插入和选择,但是在插入操作符中您可能会有什么不同? 基数估计会影响连接策略,而插入不会执行ani scan / seek / join