Contents

1 蠍磯蓋
2
3 Stored Procedure Recompile


1 蠍磯蓋 #

襷 れ螻 螳 貎朱Μ襯 ろる 牛磯伎 企 ろ螻 語瑚?
SELECT e.empno, e.ename, d.deptno
FROM scott.emp e, scott.dept d
WHERE e.deptno = d.deptno
AND e.sal > 3000

Nested Loop 蟆瑚 Sort Merge Join 蟆瑚 覃 Hash Join 蟆瑚? Nested Loop 譟一語企 emp企覿 曙 蟆瑚 覃 dept企覿 曙 蟆瑚? れ朱 曙 蟆瑚? 碁煙り 螳? 螳? 碁煙り る 蟆瑚? 讌 蟆瑚? Sal貉殊 碁煙り 讌 讌 碁煙り る 蟆語 讌 蟆語..

襷 蟆曙一 螳 煙レ 蟆 . 5螳 企襷 譟一誤り 企 螳 磯 螻ろる 麹 襷 蟆曙一 螳 煙レ . 蠏碁 企 覈 蟆曙一 襯 一語 ろ螻 語磯 蟆 . 覃 覈 ろ螻 蟆 覲企 覓企 襷 螳螻 觜 蠍 覓語企. 蠏碁覩襦 殊 襷[1] 蟆曙磯 覈 譟一 襯 螻ろ螻, 殊 襷朱 ろ螻 觜 螻壱. 蠏碁覩襦 襷り覲 貎朱Μ朱讌 覦碁 覲襯 る讌 蟆 ろ螻 (誤) 焔レ 譴 讌 蟆企. 蠏碁覩襦 貎朱Μ 狩 蟆 譬. 貎朱Μ襯 蟆 覿覿 煙 蟆願鍵 覓語企. れ 貎朱Μ CategoryID襯 誤覃 ろ螻 螳 貎朱Μ襦 覲 . 螳 蠍磯 れ 覓語レ 襷り覲 貎朱Μ ろ螻 蠍 覓語企.

SELECT * FROM Northwind.dbo.Products WHERE CategoryID = 1
SELECT * FROM Northwind.dbo.Products WHERE CategoryID = 4

覓朱 襦襯 襷れ 覃 覿覿 襷り覲 貎朱Μ螳 . 覓朱 螳 螳 貎朱Μ ろ螻 (誤) 蟆 . 伎 螳 蟆曙磯 襦螳 貉危 讌 る . MSSQL Server 襷覃 ろ螻 り . 蠏碁 覲旧″ 貎朱Μ 襦 煙 襯 譴企. 蠏碁覩襦 螳 sp_executesql 襷り覲襯 る 覲旧″ 貎朱Μ朱 誤煙 螳 . 願 る狩伎 覦碁 覲襯 蟆螻 . 朱 貎朱Μ襯 襷る 襷谿螳讌企. sp_executesql 覃 朱 ろ螻 覃覈襴襦 れ 蠍磯蓋碁ゼ 螳豢. 讀, 襷り覲襯 SQL 覓語 襯 覿襴覃 蟯螻 讌 譴覲給 螻 語 .

2 #

ろ螻 企. 襦襯 ろ螻 れ ろ. 企欧語 襦 cache 蟯 企欧碁ゼ 覈 .
Use NorthWind
GO
 
IF object_id('proc_parameter_query') IS NOT NULL
        DROP PROC proc_parameter_query
GO
 
CREATE PROCEDURE proc_parameter_query @CategoryID int, @ProductID int
AS
BEGIN
        DECLARE @sql nvarchar(100)
        SET @sql = N'SELECT * FROM Northwind.dbo.Products '
        SET @sql = @sql + N'WHERE CategoryID = @Param1 '
        SET @sql = @sql + N'AND ProductID = @Param2'
        EXEC sp_executesql
                @sql,
                N'@Param1 int, @Param2 int',        
-- 企覿 譟一伎 . 
--  一危  襷り覲襯 危伎 .
                @Param1 = @CategoryID,
                @Param2 = @ProductID
END
GO

襦襯 ろ螻, Cache Insert螳 讌 危エ覲伎. 襦 覯 覈襯碁る 襷企 るジ 谿瑚. 襦襯 れ螻 螳 れ ろ.

recompile01.jpg

EXEC proc_parameter_query 1, 1
GO

recompile02.jpg

--企 螳 覦蠑語伎 proc_parameter_query 襦襯 ろ 覲伎
--蠏碁Μ螻  ExecContextHit螳 讌 危エ覲伎..
EXEC proc_parameter_query 1, 2
GO

recompile03.jpg

-- れ 襦襯 襷 螻...襦襯 覲伎.
IF object_id('proc_parameter_query2') IS NOT NULL
        DROP PROC proc_parameter_query2
GO
 
CREATE PROCEDURE proc_parameter_query2 @a int, @b int
AS
BEGIN
        DECLARE @sql nvarchar(100)
        SET @sql = N'SELECT * FROM Northwind.dbo.Products '
        SET @sql = @sql + N'WHERE CategoryID = '+ cast(@a as varchar) + ' '
        SET @sql = @sql  + N'AND ProductID = ' + cast(@b as varchar)
        EXEC(@sql)
END
GO 
 
--れ ろ螻 襦 蟯谿
EXEC proc_parameter_query2 1, 3
GO

recompile04.jpg

EXEC proc_parameter_query2 1, 4
GO

recompile05.jpg

SELECT * FROM Northwind.dbo.Products 
WHERE CategoryID = 1 AND ProductID = 5
GO

recompile06.jpg

SELECT * FROM Northwind.dbo.Products 
WHERE CategoryID = 1 AND ProductID = 4
GO

recompile07.jpg

れ襦 exec() sp_execsql企 蠏碁 SQL企 ExecContextHit 蟆 覲 . 蠏 伎 襷り覲 . MSSQL Server 襷 蟆 襷り覲 ろ螻 り 讌襷 覺るれ 一危 螳襯 覿朱 ろ螻 讌 覈詩. 螳 蟆企襦 ろ螻 襯 讌襷 覲旧″ 貎朱Μ殊襦 ろ螻 襯 讌. 蠏碁覩襦 貎朱Μ襯 燕 蟆 狩 蟆 譬. 螳 覦朱 襦襯 燕讌 襷螻, 螳 襷り覲襯 讌 j鍵 覦. 襷り覲 譟危 蟆 螻螳 .

CREATE PROCEDURE proc_parameter_query3 @a int, @b int
AS
BEGIN
        SELECT * FROM Northwind.dbo.Products 
        WHERE CategoryID = @a AND ProductID = @b
END
GO

襦 レ 襷 れ . 蠏 レ 譴 螳讌 襷るレ 蟆 襷り覲 一危 襷豢一 , 企 覲 襷 る 蟆企.

3 Stored Procedure Recompile #

襦 貉危殊 蠍磯 螻, 讌 . 貉危殊 覩碁Μ 貉危朱 蟆 覿螳 伎讌 企. 襷 企 轟危瑚 煙 轟危碁手 覃, 覿覿 煙 蟆願, 朱螳 煙 蟆企. 蠏碁覩襦 煙 蟆 れ 螻, 煙 谿場 碁煙るゼ 蟆 伎 . 蠏碁覩襦 ろ螻 覿襴讌 る, 企 襦 襷る 貉危殊 伎 蟆企. 襷 貉危朱 轟 煙 谿場る 碁煙るゼ 蟆願, 覦襦 れ 煙 谿城る 覩碁Μ 貉危朱 襦襯 蟆企襦 れ 碁煙るゼ 蟆企. 蠏碁覩襦 企 蟆曙一 貉危殊 伎 覦襯 貎朱Μ 語 覿 殊 襷れ 蟆企. 覓朱 企 蟆曙磯 ろ螻 覿襴覃 轟壱 貉危殊 讌 . 貉危殊 覦覯 2螳讌.

-- 襦 伎 
CREATE PROC Proc_Name
WITH RECOMPILE
AS
BEGIN
  
END
 
--襦襯 ろ  讌
EXEC Proc_Name WITH RECOMPILE