数据库设计步骤:
- 表结构
- 字段类型、是否允许为null、是否有默认值
- 索引设计
- 数据库引擎的选择
MySql数据库引擎:
概念:决定数据库数据增删改查的方式,MySQL的核心就是存储引擎;
InnoDB:默认的引擎,支持事务、外键,查询效率相对较低,安全性较高;
MyISAM:不支持事务,查询效率相对较高,增删改效率较低。
SHOW ENGINES # 命令来查看MySQL提供的引擎 SHOW VARIABLES LIKE 'storage_engine'; # 查看数据库默认使用哪个引擎
如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择
如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果
如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能
复制集与分布式:
-
-
1.多台机器
-
2.数据有多份,每台机器数据是一样的
-
3.解决数据高可用
-
-
分布式:
-
1.多台机器
-
2.数据有一份,每台机器数据是不同的,合在一起,是一份数据
-
3.解决数据高吞吐
- 关于主(Master)从(Slave)
-
- 这个概念是从使用的角度来阐述问题的
- 主节点 -> 表示程序在这个节点上最先更新数据
- 从节点 -> 表示这个节点的数据是要通过复制主节点而来
- 复制集 可选 主从、主主、主主从从
- 分布式 每个分片都是主,组合使用复制集的时候,复制集的是从
MySql主从复制:
作用: 利用主从在达到高可用的同时,也可以通过读写分离提供吞吐量。
注意: 对于事务中同时包含读写操作,与事务隔离级别设置有关,如果事务隔离级别为read-uncommitted 或者 read-committed,读写分离没影响,如果隔离级别为repeatable-read、serializable,读写分离就有影响,因为在slave上会看到新数据,而正在事务中的master看不到新数据。
-
-
2.查询时使用select明确指明所要查询的字段,避免使用
select *
的操作 -
3.SQL语句尽量大写
-
4.尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE
-
5.遵循最左原则,在where子句中写查询条件时把索引字段放在前面
-
6.能使用关联查询解决的,尽量不要使用子查询
-
能不使用关联查询的尽量不要使用关联查询
-
-
7.不需要获取全表数据的时候,不要查询全表数据,使用LIMIT来限制数据。
数据库优化思路:
-
1.在进行表设计时,可适度增加冗余字段(空间换时间的思想,反范式设计),减少JOIN操作,可以提高查询效率
-
3.选择恰当的数据类型,
-
4.对于强调快速读取的操作,可以考虑使用MyISAM数据库引擎
-
5.对较频繁的作为查询条件的字段创建索引;唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;更新非常频繁的字段不适合创建索引
-
6.编写SQL时使用上面的方式对SQL语句进行优化
-
7.使用慢查询工具找出效率低下的SQL语句进行优化
-
8.构建缓存,减少数据库磁盘操作
-
9.可以考虑结合使用内存型数据库,如Redis,进行混合存储。
来源:https://www.cnblogs.com/flyai/p/12181696.html