从子实体获得统计信息的正确方法

时间:2019-04-23 15:24:42

标签: c# mysql asp.net performance entity-framework

请帮助我找到提高效率的方法

程序具有以下实体:
项目1-N模块
模块1-N子模块。
子模块1-N段。
每个段都有不同的状态(默认/完成)和字数统计

当将句段插入数据库并存储在列中时,进行单词计数。

视图。 项目列表 应该少于100个项目,以便该项目将所有项目都列出而不包含include。

模块列表(参数为1 projectId)应具有一列,该列的单词已完成/总计,行已完成/总计

子模块列表(参数为1 moduleId)应具有一列,该列的单词已完成/总计,行已完成/总计

假设我每个模块有大约5万行(段)。所以性能是必须的。

选项1: 某种IQueryable Childs.Count()
选项2: 使用CRON作业将Stats列添加到数据库中的表以更新它们 或在mysql中具有存储的过程/触发器。
选项3?:在mysql中创建2个视图?从来没有做过,但也许他们适合这项工作?
建议的选项:暂时没有

以前从未使用过如此大的数据集,因此性能是必不可少的。 请指教

1 个答案:

答案 0 :(得分:0)

var query = _context.Submodules.Where(t => t.Id == id)
                    .Select(e => new Submodules{
                        Id = e.Id,
                        Name = e.Name,
                        Status = e.Status,
                        Token = e.Token,
                        ModuleId = e.ModuleId,
                        Gender = e.Gender,
                        TotalRows = e.TotalRows,
                        TotalWords = e.TotalWords,
                        CompletedWords = e.Segments.Where(a => a.Status == Abr.Recorded).Sum(y=> y.Wordcount),
                        CompletedRows = e.Segments.Where(a => a.Status == Abr.Recorded).Count()
                    }).ToList();