在千万级数据量中,取最近1w做查询,查询速度巨慢,求解!!! 返回
SqlSugar
老数据
3
1914
悬赏:5 飞吻
问题描述:在千万级(近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 5SQL虽长但是性能和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.. VIP0
2020/7/4问下 你的 CreateTime 和 OrderByType 是什么类型?
千万级数据虽说不大,CreateTime 是 Datetime类型话,你的内存较小(<8G)吧 ? 放弃吧,少年。。
去学学数据的耗时分析怎么查看,然后你自己来优化sql。
你已经是个成熟的码农了,该学会自己去排查并解决问题了。
0 回复 -
fate stay night VIP0
2020/7/5排序字段加索引 加上ORDER BY
0 回复