在千万级数据量中,取最近1w做查询,查询速度巨慢,求解!!! 返回

求助
3 299

问题描述:在千万级(近1亿)数据量中,取最近1w做查询,查询速度巨慢。


官方部分文档:

var top5 = db.Queryable<Student>().Take(5).ToList();
/*
生成SQL:
SQL Server: 
SELECT * FROM (SELECT [ID],[Name],ROW_NUMBER() OVER( ORDER BY GetDate() ) AS RowIndex  FROM [Student] ) T WHERE RowIndex BETWEEN 1 AND 5
SQL虽长但是性能和TOP5方式是一样的ORM保证了写法统一改成ROW方式


部分代码:

var date = repository.Context.Queryable<TighteningResult>()
    .OrderBy(p => p.CreateTime, OrderByType.Desc).Take(10000)     //取前10000条数据
    .WhereIF(!string.IsNullOrEmpty(request.StationID), p => p.StationID.Equals(request.StationID))
    .WhereIF(!string.IsNullOrEmpty(request.EngineCode), p => p.EngineCode.Contains(request.EngineCode))
    .WhereIF(request.Result.HasValue, p => p.Result.Value.Equals(request.Result.Value));
    .ToPageList(request.PageIndex, request.PageSize, ref countTotal);


测试代码,取最近1w数据统计数量,执行时间≈03:00

var res = repository.Context.Queryable<TighteningResult>().OrderBy(p => p.CreateTime, OrderByType.Desc).Take(10000).Count();


将生成的SQL语句直接放入数据库查询,时间跟上面接近

SELECT COUNT(1) FROM (SELECT *,ROW_NUMBER() OVER(ORDER BY [CreateTime] DESC) AS RowIndex  FROM [TighteningResult] ) T WHERE RowIndex BETWEEN 1 AND 10000


直接使用 top 10000 查询用时 2s

SELECT COUNT(1) FROM (SELECT TOP 5000000 * FROM dbo.TighteningResult) T


回到问题上,我现在想在近1亿的数据中取最近1w做查询,该怎么解决???

热忱回答3

  • ..A.. ..A.. VIP0
    1个月前

    问下 你的 CreateTime 和 OrderByType 是什么类型? 

    千万级数据虽说不大,CreateTime 是 Datetime类型话,你的内存较小(<8G)吧 ? 放弃吧,少年。。

    去学学数据的耗时分析怎么查看,然后你自己来优化sql。

    你已经是个成熟的码农了,该学会自己去排查并解决问题了。

    0 回复
  • 排序字段加索引 加上ORDER BY 

    0 回复
  • 彩3D问题描述:在千万级(近1亿)数据量中,幸运飞艇取最近1w做查询,查询速度巨慢。

         


    0 回复

版块

学习文档

最新会员

发布达人

回贴达人