单表一亿?还是全库1亿?
①首先可以考虑业务层面优化,即垂直分表.
垂直分表就是把一个数据量很大的表,可以按某个字段的属性或使用频繁程度分类,拆分为多个表.
如果日常业务不需要使用所有数据,可以按时间分表,比如说月表.每个表只存一个月记录.
水平分表就是根据一列或多列数据的值把数据行放到多个独立的表里,这里不具备业务意义.
可能你要问,这样看起来和刚才说的垂直分表没什么区别.只不过是否具备业务意义的差异,都是按字段的值来分表.
实际上,水平分表现在最流行的实现方式,是通过水平分库来实现的.即刚才所说的10个表,分布在10个mysql数据库上.这样可以通过多个低配置主机整合起来,实现高性能.
最常见的解决方案是cobar,这个帖子介绍的比较完善,可以看看.
cobar的逻辑层次图:
不过这种分库方式也是有一定局限性的,需要应用程序做相应的配合,比如说分库的情况下,虽然可以实现跨库查询,但是不能进行相关的group?by计算.
另外,之前关于水平分表的实现方式,也可以通过表分区来实现.
mysql优化的方式有很多,选择上主要还是要考虑个人的实际情况,如代码不可控的情况下,就不适合选择按字段属性分表的情况,这样可能会带来大量的重构以及很多不可预期的风险.
而架构的优化,虽然对应用是透明的,但对sql的写法有很多局限性,比如说不能使用聚合函数等等,同时也需要有充足的硬件资源,只有一台服务器的情况下是没有意义的.
相比起来,代价最低的是按时间分表或分区,这两种办法对应用来说都是透明的.
分区只需要一次本地数据迁移的操作.
而通过分表把现网数据和历史数据分离,唯一的代价是定期的数据维护.
一般如果表里面有1亿数据的情况下,索引的问题应该是常识了,这方面我就不说了.
另外如果觉得答的不错多给点分.
帮一楼的个哥们补充一下吧,你做两个表
第一个表是商品表.包含商品id,商品名,品牌,商品型号,等等
第二个是商品信息表.字段包括商品id,属性英文名称,属性中文名称,属性值.
比如我有一个三星的电视
在第一个表里面写
第二个表里面写
id=1,属性英文名:LCDTYPE,属性中文名:液晶类型,属性值:LED
......
其它摸索着看提示操作即可,还是很简单的.
以上就是土嘎嘎小编为大家整理的mysql多表怎么设计相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!