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

例如:如果我通过 ID 从数据库中获取一个字符串,我可能会调用:
SELECT * FROM PageContent WHERE ID=@ID
...在同一页面上两次,使用两个不同的 ID,但 MiniProfiler 将此报告为重复查询,即使每次的结果明显不同。

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

最佳答案

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

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

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

所以你用两个查询做你可以用一个查询做的事情(你当然必须在服务器端过滤,但这比两个查询快)。

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

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

关于sql-server - 如何停止 MiniProfiler 显示 "duplicate"SQL 查询警告参数不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25138133/

10-11 22:43
查看更多