首页 新闻 会员 周边

Dapper 查询越来越慢是什么原因

0
[已解决问题] 解决于 2018-12-13 23:01

用 Dapper 持续查询,发现耗时越来越长,代码如下:

var page = 0;
var pageSize = 10;
var count = pageSize;
var sw = new Stopwatch();

while (count >= pageSize)
{
    sw.Restart();
    count = await Query(page, pageSize, startId, maxId);
    sw.Stop();
    _logger.LogInformation($"Query {count} items with {sw.ElapsedMilliseconds}ms");
    page++;
}
private async Task<int> Query(int page, int pageSize, int startId, int maxId)
{
var sql = @"SELECT [t].[Id], 
                   [t].[Title],
                   [t].[Content], 
            FROM (
                    SELECT [x].[Id], 
                           [x].[Title], 
                           [x].[Content], 
                           ROW_NUMBER() OVER(ORDER BY [x].[Id]) AS [__RowNumber__]
                    FROM [Items] AS [x]
                    WHERE ([x].[Id] > @startId) AND ([x].[Id] <= @maxId)
                ) AS [t]
            WHERE ([t].[__RowNumber__] > @p1) AND ([t].[__RowNumber__] <= (@p1 + @p2))";

var items = _connection.Query<Item>(sql, new { startId = startId, maxId = maxId, p1 = page * pageSize, p2 = pageSize });
retrun items.Count();
}

打印出来的时间从一开始 10 ms,在8个小时内慢慢的增加到 5000 ms,请问这是什么原因呢?

蝌蝌的主页 蝌蝌 | 初学一级 | 园豆:158
提问于:2018-12-13 10:24
< >
分享
最佳答案
0

既然基于 startId ,为什么还用 ROW_NUMBER() 进行分页查询,直接 TOP 不就行了吗

奖励园豆:5
dudu | 高人七级 |园豆:31003 | 2018-12-13 10:37

已改用 top ,等待测试

蝌蝌 | 园豆:158 (初学一级) | 2018-12-13 13:28

使用 top 之后,提升很明显,基本上在 1 ms

蝌蝌 | 园豆:158 (初学一级) | 2018-12-13 23:01
其他回答(2)
0

我觉得应该是数据库的原因,而不是Dapper的原因

teagueli | 园豆:75 (初学一级) | 2018-12-13 10:34

赞同

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2018-12-13 10:44
0

跟Dapper没关系,看一下执行计划,哪块开销大,优化一下吧

chester·chen | 园豆:507 (小虾三级) | 2018-12-13 10:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册