Sql server 要回答有关查询优化工具的问题,可以使用TOAD for SQL Server来协助查询优化 我真的很喜欢这个工具,因为它可以运行SQL语句,比如20种不同的方式,并为您比较执行计划以确定最佳方式。有时我会惊讶于它对优化我的语句所起的作用,而且效果非常好 更

Sql server 要回答有关查询优化工具的问题,可以使用TOAD for SQL Server来协助查询优化 我真的很喜欢这个工具,因为它可以运行SQL语句,比如20种不同的方式,并为您比较执行计划以确定最佳方式。有时我会惊讶于它对优化我的语句所起的作用,而且效果非常好 更,sql-server,tsql,optimization,profiling,Sql Server,Tsql,Optimization,Profiling,要回答有关查询优化工具的问题,可以使用TOAD for SQL Server来协助查询优化 我真的很喜欢这个工具,因为它可以运行SQL语句,比如20种不同的方式,并为您比较执行计划以确定最佳方式。有时我会惊讶于它对优化我的语句所起的作用,而且效果非常好 更重要的是,我已经用它成为了一个更好的t-sql编写器,因为我使用了关于我编写的未来脚本的技巧。我不知道蟾蜍会如何使用这个脚本,因为正如其他人所提到的,它使用了一个光标,我没有使用它们,所以我从未尝试过优化它 TOAD是SQL Server功能的

要回答有关查询优化工具的问题,可以使用TOAD for SQL Server来协助查询优化

我真的很喜欢这个工具,因为它可以运行SQL语句,比如20种不同的方式,并为您比较执行计划以确定最佳方式。有时我会惊讶于它对优化我的语句所起的作用,而且效果非常好

更重要的是,我已经用它成为了一个更好的t-sql编写器,因为我使用了关于我编写的未来脚本的技巧。我不知道蟾蜍会如何使用这个脚本,因为正如其他人所提到的,它使用了一个光标,我没有使用它们,所以我从未尝试过优化它

TOAD是SQL Server功能的巨大工具箱,查询优化只是其中的一小部分。顺便说一句,我与Quest软件没有任何关联

是否有任何分析工具,如果 那么,它们是如何工作的呢

要回答有关查询优化工具的问题,可以使用TOAD for SQL Server来协助查询优化

我真的很喜欢这个工具,因为它可以运行SQL语句,比如20种不同的方式,并为您比较执行计划以确定最佳方式。有时我会惊讶于它对优化我的语句所起的作用,而且效果非常好

更重要的是,我已经用它成为了一个更好的t-sql编写器,因为我使用了关于我编写的未来脚本的技巧。我不知道蟾蜍会如何使用这个脚本,因为正如其他人所提到的,它使用了一个光标,我没有使用它们,所以我从未尝试过优化它



TOAD是SQL Server功能的巨大工具箱,查询优化只是其中的一小部分。顺便说一句,我与Quest软件没有任何关联

SQl Server还附带一个名为SQl Server Profiler的分析工具。这是SSMS中“工具”下菜单上的第一个选项

SQl Server还附带一个名为SQl Server Profiler的分析工具。这是SSMS中“工具”下菜单上的第一个选项

如果你还没有,有一件事你可以马上做,那就是确保你在程序的顶部设置了“无计数”。但是你应该把光标弄丢。戴夫,你想知道光标有什么坏处。正如您所看到的,游标非常慢。当你做一个基于集合的操作时,你的两个小时的游标将被极大地释放。有时,游标是最好的解决方案,但它们非常罕见。如果您正在执行插入、更新或删除操作,则基于集合的解决方案很可能要快得多。运行总计可能是一个例外,但除此之外,在考虑转到游标之前,请先尝试基于集合的解决方案。如果您尚未执行此操作,则可以立即执行一项操作,即确保在进程的顶部设置了“set NOCOUNT ON”。但是你应该把光标弄丢。戴夫,你想知道光标有什么坏处。正如您所看到的,游标非常慢。当你做一个基于集合的操作时,你的两个小时的游标将被极大地释放。有时,游标是最好的解决方案,但它们非常罕见。如果您正在执行插入、更新或删除操作,则基于集合的解决方案很可能要快得多。运行总计可能是一个例外,但除此之外,在考虑使用光标之前,请先尝试基于集合的解决方案。你没有粗鲁,这是一个很好的选择。我主要是一个程序程序员,而不是SQL专家。我看看能不能听你的建议。你没有无礼,这是一个很好的决定。我主要是一个程序程序员,而不是SQL专家。我会看看我是否能听从你的建议。我得到了关于光标的明确而响亮的信息。有人想解释一下他们的邪恶之处吗?在这种情况下,你不需要光标。“游标是邪恶的”迷因来自这样一个事实:游标操作一次只做一行事情。通常,它们可以被重新转换为一次性处理整组数据的操作,并且效率更高,允许查询优化程序对整组数据执行一次操作,这可能是它使用光标对每一行执行的操作。大多数情况下(虽然不是全部),游标是不必要的-t-sql通过其方便的临时表特别适用于这一点。有关游标不好的原因,请参见此处:。请注意,它们确实有位置,您应该认真考虑它们是否适合某个特定问题。如果你发现自己回答“是”的时间超过10%,你要么在处理一个稍微奇怪的问题空间,要么需要重新评估你的标准是否正确。我同意暴龙的观点,但我会说1%的时间不是10%,这里有几个好的答案,但这一个最接近我实现的解决方案,因此它得到了成功。感谢所有回答的人。我的新代码更短、更干净,最重要的是更快。我在30秒内处理了整整一个月的数据。好极了,我明白了关于光标的意思。有人想解释一下他们的邪恶之处吗?在这种情况下,你不需要光标。“游标是邪恶的”迷因来自这样一个事实:游标操作一次只做一行事情。通常,它们可以被重新转换为一次性处理整组数据的操作,并且效率更高,允许查询优化程序对整组数据执行一次操作,这可能是它使用光标对每一行执行的操作。大多数情况下(虽然不是全部),游标是不必要的-t-sql通过其方便的临时表特别适用于这一点。有关游标不好的原因,请参见此处:。请注意,它们确实有位置,您应该认真考虑它们是否适合某个特定问题。如果你发现自己回答“是”的时间超过10%,你要么是在处理一个稍微奇怪的问题空间,要么需要重新评估你的标准是否正确。我同意暴龙的观点,但我会说1%的时间不是10%,这里有几个很好的答案,但这一个最接近我实现的解决方案
DECLARE <necessary variables>
DECLARE @cmd varchar(1000)
DECLARE @insert varchar(100) = 'INSERT INTO MyTable COL1, COL2, ... COLN, VALUES('

DECLARE MyCursor Cursor FOR
    SELECT <columns> FROM TABLE_1 t1
    INNER JOIN TABLE_2 t2 on t1.key = t2.foreignKey
    INNER JOIN TABLE_3 t3 on t2.key = t3.foreignKey

OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @VAL1, @VAL2, ..., @VALn
WHILE @@FETCH_STATUS = 0
BEGIN
   @F = @VAL2 / 1.1  --- float op
   @S = @VAL3 + ' ' + @VAL1
   SET @cmd = @insert
   SET @cmd = @cmd + DATEPART(@VAL1) + ', '
   SET @cmd = @cmd + STR(@F) + ', '
   SET @cmd = @cmd + @S + ', '
   SET @cmd = @cmd + ')'
   EXEC (@cmd)
   FETCH NEXT FROM MyCursor @VAL1, @VAL2, ..., @VALn
END
CLOSE MyCursor
DEALLOCATE MyCursor
INSERT INTO MyTable COL1, COL2, ... , COLN
SELECT ...cols and manipulations...
FROM TABLE_1 t1
INNER JOIN TABLE_2 t2 on t1.key = t2.foreignKey
INNER JOIN TABLE_3 t3 on t2.key = t3.foreignKey
INSERT INTO NewTable
DATEPART(@VAL1) DateCol, 
@STR(@VAL2 / 1.1) FloatCol,
@VAL3 + ' ' + @VAL1 ConcatCol
FROM TABLE_1 t1
INNER JOIN TABLE_2 t2 on t1.key = t2.foreignKey
INNER JOIN TABLE_3 t3 on t2.key = t3.foreignKey
INSERT INTO MyTable 
        (COL1, COL2, ... COLN)
    SELECT 
        <columns>
            ,DATEPART(@VAL1) AS DateCol
            ,@STR(@VAL2 / 1.1) AS FloatCol
            ,@VAL3 + ' ' + @VAL1 AS ConcatCol
        FROM TABLE_1        t1    
        INNER JOIN TABLE_2  t2 on t1.key = t2.foreignKey
        INNER JOIN TABLE_3  t3 on t2.key = t3.foreignKey