一、引擎选择
我们可以通过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
数据分片主要分为垂直拆分(业务拆分)、水平拆分
垂直拆分依据:活跃度、重要性
垂直拆分好处:
- 解决表与表之间资源争用问题
- 锁争用几率小
- 实现核心与非核心的分级存储,如UDB登录库拆分为一级二级三级库
- 解决了数据库同步压力问题
水平拆分依据:时间、特定规则
水平拆分好处:
- 单表过大造成的性能问题
- 单表过大照成的单服务器空间问题
三、索引问题
索引是对数据库中一个或多个列的值进行排序的结构,建立索引有助于更快地获取信息。MySQL有四种不同的索引类型
- 主键索引(PRIMARY)
- 唯一索引(UNIQUE):索引列的值必须唯一,但允许有空值
- 普通索引(INDEX)
- 全文索引(FULLTTEXT,MyISAM以及InnoDB)
索引的优点:
- 提高数据的检索速度,降低数据库IO成本
- 降低数据排序的成本,降低CPU消耗
索引的缺点:
- 占用存储空间
- 降低更新表的速度
- 优质索引创建难
不需要创建索引:
- 表的记录太少,百万一下的数据不需要创建索引
- 经常增删改的表不需要创建索引
- 数据重复且分布平均的字段不需要创建索引,如true,false之类
- 频发更新的字段不适合创建索引
- where条件里用不到的字段不需要创建索引