关于加上select条件后,执行速度慢的问题 返回

SqlSugar 处理完成
7 344


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

  • Repository.Db.SqlQueryable<FileBasicInfo>(sql).ToListAsync()用原生SQL查询很快,用ORM构建查询慢?

    0 回复
  • fate sta fate sta VIP0
    1个月前

    SQL不同走的执行计划也有差异

    0 回复
  • fate sta fate sta VIP0
    1个月前

     m.FilePid== pid && m.FileExtend== ".pdf"

    这2个字段如果是varchar改成nvarchar试试

    0 回复
  • fate sta fate sta VIP0
    1个月前
    0 回复
  • 好像可以了,数据库FileExtend字段是varchar类型的

    [SqlParameterDbType = System.Data.DbType.AnsiString)]//我在条件字段上加上这句查询就快了

    public string FileExtend { get; set; }


    0 回复
  • [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 fate sta VIP0
    1个月前

    @不一样的烟火:这个不是BUG是SQL执行计划差异, 一般ORM默认是nvarchar,是varchar需要加 SqlParameterDbType = System.Data.DbType.AnsiString

    0 回复