sql-server - 如何停止显示 "duplicate"SQL 查询警告参数不同的 MiniProfiler?

标签 sql-server webforms mvc-mini-profiler npoco

我正在使用 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 情况会是什么样子)。

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

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

相关文章:

SQL:计算某个值从第一次出现到接下来的五分钟的出现次数,并为下一次出现重复相同的操作

sql - Transact SQL union all on json 结果转义嵌套的 json 查询

vb.net - 如何访问 RouteTable.Routes.MapHttpRoute?

asp.net - WebControl 与 Html 控件。在 Web 表单应用程序中使用它们的利弊

c# - 找不到 MiniProfiler ProfilingActionFilter 和 ProfilingViewEngine

asp.net-web-api - 从 System.Net.Http.DelegatingHandler 调用时 MiniProfiler.Current 为 null

mysql - sqlsrv 从表中找出最大值

asp.net-mvc - WebForms 和 ASP.NET MVC 共存

ruby-on-rails - 有没有办法在 Rails-API 中使用 MiniProfiler?

sql-server - Grails SQLServerException Microsoft数据库 'limit'附近的语法不正确