逻辑读取次数过多会导致查询性能下降

逻辑读取次数过多会导致查询性能下降

我正在使用 Confio Ignite8 来获取这些信息,并监控等待。

我有一个经常运行的查询,我注意到有些天会产生极高的逻辑读取次数,执行 91,000 次,逻辑读取次数为 +300,000,000。在正常情况下,逻辑读取次数要低得多,执行 94,000 次,逻辑读取次数为 18,000,000。

该查询的执行计划利用聚集索引查找,如下所示。

StmtText |--嵌套循环(内连接,外部引用:([f].[ParentId]))|--聚集索引查找(对象:([StructuredFN].[dbo].[Folder].[PK_Folders] AS [f]),SEEK:([f].[FolderId]=(8125)),WHERE:([StructuredFN].[dbo].[Folder].[DealId] as [f].[DealId]=(300)) ORDERED FORWARD)|--聚集索引查找(对象:([StructuredFN].[dbo].[Folder].[PK_Folders] AS [p]),SEEK:([p].[FolderId]=[StructuredFN].[dbo].[Folder].[ParentId] as [f].[ParentId]),其中:([StructuredFN].[dbo].[Folder].[DealId] 作为 [p].[DealId]=(300))已排序转发)

showstatistics io 的输出...表“文件夹”。扫描计数 0、逻辑读取 4、物理读取 0、预读读取 0、lob 逻辑读取 0、lob 物理读取 0、lob 预读读取 0。

有什么想法可以解决为什么在某些日子出现这些高逻辑读取而在其他日子却没有出现的问题?

答案1

它通常被称为参数嗅探,这里有一篇关于如何处理它的精彩文章:

http://www.simple-talk.com/sql/t-sql-programming/参数嗅探/

相关内容