小编Jas*_*son的帖子

sql 可以为这个程序生成一个好的计划吗?

我读过那些本身并不总是做同样事情的过程,不会总是有一个好的计划。也就是说(如果我错了,请纠正我),如果我有一个过程,如果当天是偶数,它从表 X 中读取,否则它从表 Y 中读取,并且它第一次执行的时间是偶数,那么生成的计划将被优化对于从表 X 读取而不是从 Y 读取,即使从 Y 读取,sql 也会使用该计划,恕我直言很容易理解并尽量避免,但是作用于同一个表的过程呢。

像下面的示例(显然是一个非常简单的示例),如果它第一次运行,并且该项目确实存在,而随后的运行通常不存在(或反之亦然),我是否会得到一个“不太好”的计划这会影响性能?

CREATE PROCEDURE dbo.MyProc
(
@data    VarChar(25),
@name    VarChar(25)
)

AS

    IF NOT EXISTS (SELECT * FROM dbo.MyTable WHERE myname = @name)
    BEGIN
        INSERT dbo.MyTable (myname, mydata)
        VALUES (@name, @data)
    END
    ELSE
    BEGIN
        UPDATE dbo.MyTabel
        SET mydata = @data
        WHERE myname = @name
    END
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures optimization execution-plan sql-server-2008-r2

5
推荐指数
1
解决办法
414
查看次数