首页 新闻 会员 周边 捐助

dapper.net 执行query比管理工具控制台直接执行慢很多?

0
[已解决问题] 解决于 2019-08-26 11:20

一条sql语句,在mysql管理工具执行查询一般在500ms以内,但是在代码中执行却要4.5s左右。
奇怪的是去掉sql语句里的group by,代码执行会进入1s以内,有遇到类似情形的吗,还望指点一下,没园豆了奖励了,谢谢!

我尝试切换成存储过程,执行起来还是很慢。

是dapper的问题吗,还是我少什么参数

去海边生活的主页 去海边生活 | 初学一级 | 园豆:66
提问于:2019-07-31 17:04
< >
分享
最佳答案
0

数据库在本地,还是在远程服务器上

奖励园豆:5
顾星河 | 大侠五级 |园豆:7281 | 2019-07-31 17:11

远程服务器上。去了group by,代码执行也很快,1s以内。但这sql语句group by关代码啥事啊 真他妈 唉。 

去海边生活 | 园豆:66 (初学一级) | 2019-07-31 17:16

@去海边生活: 你用dapper查的时候,里面是手写的sql,还是用的ORM里的方法

顾星河 | 园豆:7281 (大侠五级) | 2019-07-31 17:25

@默卿: 完全写死得sql。

var labelDictionary = new Dictionary<int, LabelSortViewModel>();
var labelTask = connection.QueryAsync<LabelSortViewModel, LabelDetailViewModel, LabelSortViewModel>(
sql,
(labelSort, labelDetail) =>
{
LabelSortViewModel labelSortEntry;

if (!labelDictionary.TryGetValue(labelSort.Id, out labelSortEntry))
{
labelSortEntry = labelSort;
labelSortEntry.LabelList = new List<LabelDetailViewModel>();
labelDictionary.Add(labelSortEntry.Id, labelSortEntry);
}
labelSortEntry.LabelList.Add(labelDetail);

return labelSortEntry;
},
splitOn: "LabelDetailId");

await Task.WhenAll(labelTask);

 

用到了它得Multi-Mapping,但是即便不用这个方法,用最简单得connection.Query<T>(sql);还是要4秒。去了group by代码执行就都很快。实在不行就代码排重了。多谢

去海边生活 | 园豆:66 (初学一级) | 2019-07-31 17:32

@去海边生活: 看不出来为什么 (/ω\)

顾星河 | 园豆:7281 (大侠五级) | 2019-07-31 17:41

@去海边生活: 你新建个控制台程序单独测一下吧,引用的dapper版本保持一致,只用最简单得connection.Query<T>(sql),其他什么代码都不要,看下时间多少呢

顾星河 | 园豆:7281 (大侠五级) | 2019-07-31 17:43

@默卿: 嗯嗯,做了测试了,一下午基本上都在改,没找到为什么。现在不用sql group by了,代码排重。多谢了

去海边生活 | 园豆:66 (初学一级) | 2019-07-31 17:45
其他回答(2)
0

切换到ado.net 试试。。

阿布523 | 园豆:208 (菜鸟二级) | 2019-08-26 12:23
0

大概是因为你没做分页,然后返回的数据量太大所致。

SoarNo1 | 园豆:195 (初学一级) | 2019-08-26 13:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册