背景:有客户说操作员关联权限后,某个页面查询不出数据,不关联权限就可以
现象:1、用带权限的账号登进去后,查询不出数据,F12发现报错,"An error occurred while executing the command definition. See the inner exception for details."
2、浏览器请求记录耗时30s
3、勾选权限越多耗时越长,全部勾选权限时,才报上面的错
分析:根据现象3判定查询流程基本正常,不存在基础语法错误,根据现象2判断应该是性能问题,一般程序里连数据库的超时时间就是30s。
进一步分析:连客户库,SQL Server Profiler 中监听到的SQL,耗时55s,不带权限关联查询时,常规耗时0-1s
小结:性能问题,分析监听的SQL,查看查询计划,发现开销比较大的地方走的是索引扫描,而不是索引查找,因此查询效率低,进一步分析发现SQL中的部分列带函数,导致索引失效,因此耗时长
去掉该函数后,查询时间0-1s!
不过在应用里,并不是直接编写的sql去访问数据库,而是通过LINQ转的SQL,产品里由于数据库设计等多方面原因,导致LINQ转的SQL带RTRIM函数。原本是不太好解决的,毕竟这种框架底层自发行为,人为很难干预。在网上找了一些资料后,最终通过优化LINQ编写方式解决了(改善WHERE条件的处理)。
总结:数据库字段不要用char!LINQ不熟悉的话慎用!
标签:LINQ,查询,耗时,关联,SQL,NET,权限 From: https://www.cnblogs.com/sunshine-wy/p/18283808