关于加上select条件后,执行速度慢的问题 返回
var result = await Repository.Db.Queryable<FileInfo>().Where(m => m.FilePid== pid && m.FileExtend== ".pdf").OrderByDescending(m => m.id).ToOffsetPageAsync(page, limit);
var result = await Repository.Db.Queryable<FileInfo>().Where(m => m.FilePid== pid && m.FileExtend== ".pdf").OrderByDescending(m => m.id).Select(m => new
{
m.FileMd5Id,
m.FileName,
m.FileDesc,
m.FileExtend,
m.FileSize,
m.AddDate
}).ToOffsetPageAsync(page, limit);
数据库有上千万的条数据,数据库字段有18个,条件也做了索引,为什么第一条执行零点几秒就出来了,加上select条件就要3-5秒以上呢?根据orm框架生成的sql语句在SqlServer上执行都很快,为什么呢 不太熟悉ORM。SqlServer执行原理,不是select 字段...要比select *快吗?
热忱回答(7)
-
不一样的烟火 VIP01个月前
Repository.Db.SqlQueryable<FileBasicInfo>(sql).ToListAsync()用原生SQL查询很快,用ORM构建查询慢?
0 回复 -
fate sta VIP01个月前
SQL不同走的执行计划也有差异
0 回复 -
fate sta VIP01个月前
m.FilePid== pid && m.FileExtend== ".pdf"
这2个字段如果是varchar改成nvarchar试试
0 回复 -
fate sta VIP01个月前0 回复
-
不一样的烟火 VIP01个月前
好像可以了,数据库FileExtend字段是varchar类型的
[SqlParameterDbType = System.Data.DbType.AnsiString)]//我在条件字段上加上这句查询就快了
public string FileExtend { get; set; }
0 回复 -
不一样的烟火 VIP01个月前
[SugarColumn(ColumnName = "file_pid", SqlParameterDbType = System.Data.DbType.AnsiString)]
public int Pid { get; set; } 这条字段属性在SqlServer数据库中是int类型的 构建查询也出现以上执行慢的情况,加上SqlParameterDbType = System.Data.DbType.AnsiString后执行快了,
如果只有这一个查询条件执行没有任何问题,条件多了就必须加上这条语句才正常,感觉这是bug吗
0 回复 -
fate sta VIP01个月前
@不一样的烟火:这个不是BUG是SQL执行计划差异, 一般ORM默认是nvarchar,是varchar需要加 SqlParameterDbType = System.Data.DbType.AnsiString
0 回复