MySQL库表设计

一、引擎选择

我们可以通过SHOW ENGINES查看存储引擎

对于存储引擎我们可以随便选择吗?答案是不可以,在表之间需要关联外键,却指定了不同的存储引擎,这些表是不能创建外键约束的。因此对于存储引擎我们也不能随意选择

MySQL中常用的存储引擎主要是MyISAM和InnoDB

MyISAM:配置在Web应用程序中,全表锁,具有较高的执行速度,一个写请求阻塞相同表格的所有读写请求,并发性能差,占用空间相对较少。MyISAM数据损坏的概率比InnoDB高,因此,MyISAM需要较长的恢复时间

可优化方面:优化磁盘存储、通过监控和优化Keycache来有效使用内存,优化数据库表

InnoDB:行级锁(SQL都走索引查询),并发能力强(相对而言,并发量大的时候一样会使SQL操作变成线性),占用空间是MyISAM的2.5倍,不支持全文索引(5.6开始支持),支持事务。

可优化方面:索引、缓冲池、日志文件和表空间

二、分表方法

在数据库表使用过程中,为了减少数据库服务器的负担、缩短查询时间,我们常常会考虑做分表设计。

在我之前的《MySQL主要优化手段介绍》https://blog.csdn.net/weixin_37645838/article/details/82771898

数据分片主要分为垂直拆分(业务拆分)、水平拆分

垂直拆分依据:活跃度、重要性

垂直拆分好处:

  1. 解决表与表之间资源争用问题
  2. 锁争用几率小
  3. 实现核心与非核心的分级存储,如UDB登录库拆分为一级二级三级库
  4. 解决了数据库同步压力问题

水平拆分依据:时间、特定规则

水平拆分好处:

  1. 单表过大造成的性能问题
  2. 单表过大照成的单服务器空间问题

三、索引问题

索引是对数据库中一个或多个列的值进行排序的结构,建立索引有助于更快地获取信息。MySQL有四种不同的索引类型

  1. 主键索引(PRIMARY)
  2. 唯一索引(UNIQUE):索引列的值必须唯一,但允许有空值
  3. 普通索引(INDEX)
  4. 全文索引(FULLTTEXT,MyISAM以及InnoDB)

索引的优点:

  1. 提高数据的检索速度,降低数据库IO成本
  2. 降低数据排序的成本,降低CPU消耗

索引的缺点:

  1. 占用存储空间
  2. 降低更新表的速度
  3. 优质索引创建难

不需要创建索引:

  1. 表的记录太少,百万一下的数据不需要创建索引
  2. 经常增删改的表不需要创建索引
  3. 数据重复且分布平均的字段不需要创建索引,如true,false之类
  4. 频发更新的字段不适合创建索引
  5. where条件里用不到的字段不需要创建索引
扫描二维码关注公众号,回复: 3349922 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_37645838/article/details/82791662