3

我正在使用 MiniProfiler 检查 NPoco 对 SQL Server 的操作,但我注意到即使 SQL 参数具有不同的值,它也会报告重复查询。

例如:如果我按 ID 从数据库中获取字符串,我可能会调用:

SELECT * FROM PageContent WHERE ID=@ID

...在同一页面上两次,具有两个不同的 ID,但 MiniProfiler 将其报告为重复查询,即使每次结果显然都不同。

有什么方法可以让 MiniProfiler 考虑 SQL 参数值,这样它就不会认为这些查询是重复的?我不确定这个问题是否是 MiniProfiler 的一部分,或者是否是 NPoco 向 MiniProfiler 报告其操作的问题,所以我将同时标记两者。

4

1 回答 1

2

我认为这是设计使然,实际上是重复查询检测存在的原因之一。

如果您在一页上运行该查询两次,其中唯一的区别是参数值,那么您也可以运行一次并在该查询中包含两个参数值。

SELECT * FROM PageContent WHERE ID in (@ID1, @ID2)

因此,您正在处理两个查询,而您可以处理一个查询(当然,您必须在服务器端进行过滤,但这比两个查询要快)。

重复查询标签并不是说您不止一次运行绝对相同的查询(尽管它也适用于那里)。相反,它突出了优化查询方法并将不同查询合并为一个的机会(想想 N+1 情况会是什么样子)。

如果默认功能不能满足您的需求,您可以随时更改它!计算 duplicateTimings 的功能位于UI/includes.js中。CustomUITemplates您可以通过在 MiniProfiler 中打开并在其中放置您自己版本的 includes.js 来提供您自己的文件版本,该文件以不同的方式定义重复项(可能通过在检测重复项时查看命令文本之外的参数值).

于 2014-08-06T08:15:40.600 回答