MySQL设计最佳实践

🎉如何恰当选择引擎?

  • 如果不需要事务,而且数据操作量大,论坛,可以用MyISAM
  • 需要强事务,做电商、支付、金融这样的业务,可以用InnoDB
  • 在内存中临时建表,要求速度快、数量小,不需要持久化,可以使用Memeory
  • 当数据都是归档的,可以使用Achieve,toku,推荐用toku,它的压缩效率非常高

🎉char、varchar的选择?

定长选择char、变长选择varchar

🎉text/blob/clob)的使用问题?

不推荐使用,一使用性能会下降几倍甚至一个数量级。因为它们一方面数据量大,另一方面查询时需要查询2次数据库。

🎉文件、图片是否直接放入数据库?

不建立,如果要放,放文件路径或url

🎉是否使用外键、触发器?

一般不使用,因为使用外键会降低性能。

🎉唯一约束和索引的关系?

创建唯一约束时,会自动创建索引,所以我们不用再手动建立索引。

🎉是否可以冗余字段?

可以,有些时候使用冗余字段可以减少关联查询,直接在当前表查询,查询效率更高。

🎉是否使用游标、变量、视图、自定义函数、存储过程?

不推荐使用,因为使用后可移植性低,而且业务操作一般放在代码层面解决而不是数据库。

🎉自增主键的使用问题?

数据量不大的时候可以使用

🎉能够在线修改表结构(DDL操作)?

不推荐,因为DDL操作会锁表,影响用户使用。可以在晚上业务系统没什么压力的时候做。非常推荐在停机的时候做。

🎉逻辑删除还是物理删除?

一般情况下建议只做逻辑删除不做物理删除

🎉要不要加create_time,update_time时间戳?

推荐所有表都加上,一方面可以记录我们什么时间创建表,什么时间修改过表,另一方面有利于数据迁移。

🎉 数据库碎片问题?

类似JVM的垃圾压缩,这些操作会锁表,推荐停机的时候操作。

🎉如何快速导入导出、备份数据?

🔥导出方式

  • 直接查出来,然后存起来,需要锁表。推荐停机的时候做
  • 主从结构时,把从库的数据备份
  • 做数据的binlog订阅

🔥导入方式

  • insert批量导入
  • Java代码导入
  • 脚本导入

导入时一把会先把表的索引和约束全部去掉,然后再批量导入,最后再基于新的数据建立索引和约束。因为索引和约束本身是数据结构,每次插入数据都要进行维护,消耗性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值