Mysql 非规范化建议
我有一个学区数据库(大约15000个学区,而且还在增加)和每个学区员工的退休计划/福利。数据非常规范化:Mysql 非规范化建议,mysql,optimization,nosql,denormalization,Mysql,Optimization,Nosql,Denormalization,我有一个学区数据库(大约15000个学区,而且还在增加)和每个学区员工的退休计划/福利。数据非常规范化: 地区记录与0或n个退休计划选项关联(其中n
- 地区记录与0或n个退休计划选项关联(其中n<10分布在3个联接表中)
- 地区记录与0或n个福利关联(其中n从1个联接表中接近40)
- 一个地区还与一些其他事物相关联,其中协会的数量是名义上的
所有退休计划
视图和所有福利计划
视图都有一对一的关系。这给了我一个干净的连接集,结果是一个统一的结果集,但很明显,它有自己的问题集,我会尽快解决
也就是说,随着更多数据的添加,速度会变得非常缓慢
我在寻找一些关于非规范化的建议。我曾经考虑过一个报告表,它执行视图的功能,但可以编制索引。我还考虑过将这整套地区数据转储到MongoDB(或类似产品)。我肯定还有其他选择,但我会玩试错游戏,所以我希望这里的人能给我一些建议,让我在合理解决方案的范围内
底线是,我需要能够存储约15000个(并且不断增长)地区记录以及大量附加元数据,然后以非常精细的级别报告这些数据。除了我自己的想法带我去的地方,有人有什么想法或建议吗?我正在努力提前解决我知道即将出现的问题。我希望这会有所帮助,因为我最近做了大量工作,将数据从关系型移动到面向文档的(非规范化) 将数据移动到Mongo的一些选项:
如果您想了解任何一点的详细信息,请告诉我。=)“我已经设置了几个视图(嘘,我知道)…”视图是SQL数据库管理系统的基本功能。当你必须使用视图和SHH彼此相邻时,你应该考虑切换到不同的DBMS。我在那里有点笨拙,但事实上,视图可能不是这个特定需求的正确平台。考虑到数据的大小(特别是非规范化后的列数),视图的速度与我预期的一样慢。我不知道如何优化它们,但是我很想弄错。获得更好性能的一个方法是切换到一个具有更好查询优化器的dbms。那么这些
所有退休计划
和所有福利计划
视图是否使用GROUP\u CONCAT
聚合和连接所有不同的字符串?@ruakh-如果我理解你的问题,没有。没有进行字符串连接。我面前没有确切的数字,但每个地区可能有0个或更多的~30个不同的福利,并且福利记录中有一些财产。all\u benefits\u pans
视图保存包含每个福利的每个财产的地区记录。总计约100列。谢谢,Ryan。我首先想确定,如果我搬到Mongo,我仍然可以执行非常精细的查询。MongoDB“文档”将代表一个地区(包括其所有退休计划/福利数据),因此我可以将其作为嵌套组件包含,也可以如您所述将其全部展开。听起来平坦更快?我必须研究一下group\u concat
。从MySQL迁移到Mongo更容易。Mongo有一种非常丰富的查询语言。语法可能需要一些时间才能习惯,但您肯定可以完成很多工作。group_-concat可以创建数组或子文档。最后查看了group_-concat
。那不完全是我所拥有的。我没有计算字段值,而是将记录展平。如果一个地区可以有3个可能的福利记录(每个都有一个ID和一个提供者),我将这些福利记录展平到视图中,这样一个地区现在就有1个福利记录,并带有前缀为“区分”的字段。例如,意外保险id
,意外保险供应商
,牙科id
,