MySQL在实际场景应用中的问题和思路

本文探讨了MySQL在实际应用中遇到的问题及其解决方案,包括分表策略(横向与纵向)以应对大数据量,数据抽象以简化权限判断,以及用行代替列存储以方便字段扩展。同时,提出了数据库设计的一些建议,如避免使用枚举类型和谨慎使用Json字段。
摘要由CSDN通过智能技术生成

1、分表

分为横向分表和纵向分表,横向分表直观来说即画一条水平线将大表分成若干个子表,每个子表的字段是相同的;纵向分表偏向于按照业务逻辑分表,每个子表有不同的字段。

举例来说,现有用户表:t_user,记录注册登录信息(字段有username,password等),记录个人信息(字段有realname,idcard等),记录用户订单信息(字段有order,status等)。

首先进行纵向分表,按照业务逻辑将用户表拆成三张表:注册登录信息表、个人信息表、订单表。每张表都包含UID字段,根据UID作为表的CURD条件。

纵向分表的好处是,避免大表数据稀疏。比如100人注册,完成填写个人信息有50人,但真正下单只有1个人,这样50行数据的个人信息相关字段、99行的订单信息相关字段都为空。但分表后也会使原本一条SQL即可查询到的信息要用3条SQL才能查询到,所以这里强调纵向分表需要按照业务逻辑分表,即登录接口不需要获取订单信息,订单接口也不需要验证登录信息,才会认为这种分表处理是合理的。

然后随着用户数量继续增加还会进行横向分表,如根据UID尾数将1张表分为10张表:user_base 拆成 user_base_0 ~ user_base_9,横向分表后可以有效解决单表数据量过大问题,但查询条件非UID时,应用层完成一次查询,底层需要查询10张表(union操作)。所以需要从实际业务角度出发,保证绝大多数的操作是以UID作为条件的,这样只需查询指定的一张表即可。

其他分表规则,还可能按照更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值