.Net6环境下使用SqlSugar进行MySQL查询时,一对多关系导致查询缓慢,*号查询反而快速。作者分析了事务日志,发现SQL语法无误,但不解其执行机制,暂记问题待解,提供参考案例。
摘要生成于
,由 DeepSeek-R1 满血版支持,
环境和版本:.Net 6 + SqlSuger 5.1.4.* ,数据库是mysql 5.7 ,数据量在2000多条左右
业务是一个非常简单的查询,代码如下:
var list = _dbClient.Queryable<tb_name>()
.ToList();
tb_name 下配置了一对多的关系导航,但是执行时没有include导航属性,当执行上述代码时,查询非常慢,甚至会超时报错:
The Command Timeout expired before the operation completed.
控制台打印了sql,在Navicate里执行也是很快的,非常的诡异,但代码里执行就查询不了,控制台记录的sql如下:
随后,我查询了数据库的事务日志,发现也是正常的,emmm事情陷入了僵局.....
然后突然想到只查询一个字段试试,发现执行非常快,就立马把单个字段换成了整个对象,执行速度也非常的快,代码如下:
var list = _dbClient.Queryable<tb_name>()
.Select(x => x)
.ToList();
控制台生成的sql为:
select * from tb_name
emmmm事情再次变得诡异,明明sql没什么差别,除了 * 和 列出各属性,按照我之前的了解,查询时使用字段名,比 select * 的效率是要高的,不知道sqlSugar内部的执行机制到底是怎么样的,为什么会有这个问题,现在没时间深究,先记录一下,希望能给遇到同样问题的小伙伴提供参考。
.
Net
Core 2
.
0 (以下简称Core)正式版已经发布有一段时间了, 博主也第一时间尝鲜了, 相比Core 1
.
0和1
.
1类库支持方面提高了不少, 开发起来也方便快捷很多了
.
废话不多说了, 搭建开始
.
(PS: 博主使用的的是VS2017最新版本, 操作系统使用的是Windows 10专业版
6
4位)
Core的环境搭建我就不多说了, 贴个微软的官网, 自己去下载搭建一个就好了
.
点
0
.
前言
前一篇我们详细的介绍了
SqlSugar
的增删改查,那些已经满足我们在日常工程开发中的使用了。但是还有一点点在开发中并不常用,但是却非常有用的方法。接下来让我们一起来看看还有哪些有意思的内容。
1
.
不同寻常的
查询
之前介绍了针对单个表的
查询
,同样也是相对简单的
查询
模式。虽然开发完全够用,但是难免会遇到一些特殊的情况。而下面这些方法就是为了解决这些意料之外。
1
.
1 多表
查询
SqlSugar
提供了一种特殊的多表
查询
方案,使用IQueryable接口 。来看看是怎样操作的吧:
ISugarQuer
今天遇到一个
问题
,有用户反应,在site上打开报表,一直loading,出不来结果。
遇到这种
问题
,我立刻simulate用户使用Filter Condition,
问题
repro,看来不是偶然事件,通过SQL Server Profile Capture 到执行的
查询
语句。
Step1,奇怪的是,在SSMS中执行,SQL Server 很快返回结果,初
.
.
.
在线上 有些sql执行的比较慢,希望可以指定
超时
时间, 取消这个sql的执行,以下以druid为例为实现这个功能
jdbc 有2个
超时
时间, 一个是queryTimeout, 一个是socketTimeout,
queryTimeout的作用是sql执行
超时
之后,可以取消这次的执行,底层原理是发送kill $id通知mysql来中断这个sql的执行
socketTimeout的作用主要是为了解
.
.
.
优化 SQL
查询
语句。这可能包括使用索引来加速
查询
,删除无用的列或表,或者使用更高效的
查询
方法。
增加服务器资源。如果服务器的 CPU、内存或存储不足,可能会导致
查询
执行缓慢。在这种情况下,可以尝试增加服务器的资源,以提升
查询
的执行速度。
调整
超时
时间。如果 SQL
查询
执行
超时
,可以尝试增加执行
超时
时间的限制,以让
查询
有更多的时间完成。
.
.
.
如果SQL的数据库越来越多,有时候会遇到读取
超时
,死锁等一大堆
问题
,按经验来说,数据结构设计不合理,经常使用视图等原因都有,那些怎么解决呢?
1、由于数据库设计
问题
造成SQL数据库新增数据时
超时
Microsoft OLE DB Provider for SQL Server 错误 '80040e31'
[ODBC SQL Server