一条sql语句,在mysql管理工具执行查询一般在500ms以内,但是在代码中执行却要4.5s左右。
奇怪的是去掉sql语句里的group by,代码执行会进入1s以内,有遇到类似情形的吗,还望指点一下,没园豆了奖励了,谢谢!
我尝试切换成存储过程,执行起来还是很慢。
是dapper的问题吗,还是我少什么参数
数据库在本地,还是在远程服务器上
远程服务器上。去了group by,代码执行也很快,1s以内。但这sql语句group by关代码啥事啊 真他妈 唉。
@去海边生活: 你用dapper查的时候,里面是手写的sql,还是用的ORM里的方法
@默卿: 完全写死得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代码执行就都很快。实在不行就代码排重了。多谢
@去海边生活: 看不出来为什么 (/ω\)
@去海边生活: 你新建个控制台程序单独测一下吧,引用的dapper版本保持一致,只用最简单得connection.Query<T>(sql),其他什么代码都不要,看下时间多少呢
@默卿: 嗯嗯,做了测试了,一下午基本上都在改,没找到为什么。现在不用sql group by了,代码排重。多谢了
切换到ado.net 试试。。
大概是因为你没做分页,然后返回的数据量太大所致。