時間:2024-03-12 20:33作者:下載吧人氣:27
大家聽到“嗅探”這個詞應該會覺得跟黑客肯定有關系吧,使用工具嗅探一下參數,然后截獲,脫褲o(∩_∩)o 。
事實上,我覺得大家太敏感了,其實這篇文章跟數據庫安全沒有什么關系,實際上跟數據庫性能調優有關
相信大家有泡SQLSERVER論壇的話不多不少應該都會見過“參數嗅探”這幾個字
這里有三篇帖子都是講述參數嗅探的
http://social.msdn.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/caccb7f3-8366-4954-8f8a-145eb6bca9dd
http://msdn.microsoft.com/zh-cn/magazine/ee236412.aspx
http://social.msdn.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/bfbe54de-ac00-49e9-a83b-f97a60bf74ef
下面我給出一個測試數據庫的備份文件,里面有一些表和一些測試數據 ,大家可以去下載,因為我下面用的測試表都是這個數據庫里的
只需要還原數據庫就可以了,這個數據庫是SQL2005版本的,數據庫名:AdventureWorks
下面只需要用到三張表,表里面有索引:
[Production].[Product] [SalesOrderHeader_test] [SalesOrderDetail_test]
數據庫下載鏈接:AdventureWorks
其實簡單來講,參數嗅探我的很通俗的解釋就是:SQLSERVER用鼻子嗅不到具體參數是多少
所以他不能選擇最合適的執行計劃去執行你的查詢,所以參數嗅探是一個不好的現象。
想真正了解參數嗅探,大家可以先創建下面兩個存儲過程
存儲過程一:
USE [AdventureWorks]
GO
DROP PROC Sniff
GO
CREATE PROC Sniff(@i INT)
AS
SELECT COUNT(b.[SalesOrderID]),SUM(p.[Weight])
FROM [dbo].[SalesOrderHeader_test] a
INNER JOIN [dbo].[SalesOrderDetail_test] b
ON a.[SalesOrderID]=b.[SalesOrderID]
INNER JOIN [Production].[Product] p
ON b.[ProductID]=p.[ProductID]
WHERE a.[SalesOrderID]=@i
GO
網友評論