【发布时间】:2017-05-07 10:27:16
【问题描述】:
我创建了一个从大型 Mysql 数据库中获取数据的 asp mvc 项目 ~ 500000。
我使用单独的列过滤器将数据表添加到我的前端,其中仅显示 10 个条目。
data = dc.books.OrderBy(x => x.id).Where(x =>
(market_id == 0 || x.market_id == market_id)
&& (name == null || x.name != null && (x.name.Contains(name)))
&& (author == null || x.author != null && (x.author.Contains(author)))
).Skip(param.Start).Take(10).ToList();
工作又快又好。
当我尝试在过滤器之后添加计数以进行合并时。 Not work server Mysql Timeout 错误或工作很慢
count = db.books.Count(x =>
(market_id == 0 || x.market_id != 0 && x.market_id == market_id)
&& (name == null || x.name != null && (x.name.StartsWith(name)))
为什么计数不工作还是那么慢?
所有代码我的控制器here
【问题讨论】:
-
Sql Server 在计数方面往往非常快(也包括谓词)。无论计数是否快速,它都可能在数据库引擎中根深蒂固。我不了解 MySql,但我认为您缺少一些重要的索引。