schema与数据类型的优化

本文探讨了数据库设计中的范式和反范式的应用,强调在企业环境中混合使用的重要性。代理主键被推荐用于减少业务耦合,同时统一键策略可以降低系统维护成本。字符集选择应考虑实际需求以节省存储空间。存储引擎方面,InnoDB因其支持事务和行级锁而更适用于高并发场景。此外,合理利用索引和拆分大型字段可以提升性能并优化IO操作。适当的数据冗余和表拆分也是提高效率的关键策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

schema与数据类型的优化

合理使用范式和反范式

  • 三范式存在的意义 没有数据冗余
  • 企业中范式和反范式需要混合使用

主键的选择

  • 代理主键 与业务无关,无意义的数字
  • 自然主键 事务属性中的自然唯一标识
  • 推荐使用代理主键 他们不与业务耦合,因此更容易维护
    一个大多数表,最好是全部表,通用的键策略能够减少需要编写的源码数量,减少系统的总体拥有成本

字符集的选择

  • utf8 纯拉丁文能表示的内容,就没必要选择纯latin之外的其它字符编码,减少存储空间
  • 如果我们可以确定不需要存放多种语言,就没必要非得使用UTF-8或者其他UNICODE字符类型,这会造成大量的存储空间浪费
  • MySQL的数据类型可以精确到字段,所以当我们需要大型数据库中存放多字节数据的时候,可以通过对不同表不同使用不同的数据类型来较大程度减小数据存储量,紧而降低IO操作次数并提高缓存命中率
  • utf8(mb4)存在其他字符的时候,最常用 uft8(latin) utf8(gbk)不建议使用

存储引擎的选择

  • engine = innodb my.ini default-storage-engine = innodb
  • MYISAM
  • memory 不能进行持久化
MyISAMInnoDB
索引类型非聚簇索引聚簇索引
支持事务
支持表锁
支持行锁
支持外键
支持全文索引
适合操作类型大量select大量insert、delete、update

聚簇非聚簇:数据文件跟索引文件是否放在一起
锁粒度越小越好,innodb默认给索引加锁
操作列是索引列加行锁,否则加表锁
查询时 like % 开头不会走索引
存储引擎 —— 数据文件的组织形式

适当的数据冗余

&……%¥#@&……%¥#……%¥#

适当拆分

表中存在类似text或者大型varchar的时候,如果我们在访问这张表的时候都不需要这个字段,应该将其拆分到独立的表中,以减少常用数据所占的存储空间,好处是每个数据块中可以存储的数据条数大大减少,既能减少IO次数,能提高内存中的缓存命中率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值