1.存储引擎:
(1)处于MYSQL服务器的最底层,直接存储数据
(2)本质就是特定的数据存储格式
(3)MyISAM:
1.采用B+树实现
2.访问速度快
3.数据插入时不排序,插入快
4.不支持事务,外键约束(在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键)
5.表级锁,不支持高并发
(4)InnoDB:
(1)支持事务、外键约束
(2)行级锁,擅长处理并发
(3)有独立的缓冲池
(4)数据插入前按照主键排序,不擅长快速插入和检索
(5)ACID:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。
2.数据类型:
(1)tinyint(1字节),smallint(2字节),mediumint(3字节),int(4字节),bigint(8字节)
(2)decimal(长度,精度)
(3)将null插入timestamp字段后,实际插入了mysql服务器当前的日期和时间
(4)复合数据类型:enum,set
(5)blob二进制大数据存储:声音,图像,图片,视频
(7)在mysql中应该使用内置的日期和时间数据类型,而不是用字符串来存储日期和时间
3.范式与逆范式:
(1)问题:
1.数据冗余
2.插入异常:可能会有多列空值
3.删除异常
4.更新异常:需要对所有记录都进行操作
(2)范式:
1.1nf:属性不能有多个值;不能有重复的属性
2.2nf:确保表中每列都和主键相关
3.3nf:不包含已在其他表中已包含的非关键值信息
(3)数据库越范式化,就需要join越多的表
(4)逆范式:打破范式的规定,通过增加冗余或重复的数据来提高数据库的性能
(5)单表查询比关联查询要快
4.数据库索引:
(1)explain+语句:获取语句的执行计划,而不是真正执行该语句
(2)tips:
1.不要过度使用索引,占空间
2.只对where子句中频繁使用的建立索引
3.使用短索引
5.sql语句优化:
(1)目标:避免全表扫描,尽量走索引
(2)tips:
truncate 删除全表
尽可能使用commit
使用union-all不排除重复结果,代替union提高效率
避免使用*
利用条件过滤避免limit分页,因为limit(工作原理(limit n,m):先读取前面n条记录,然后抛弃前n条,读后面m条想要的;n约到性能越差)会检索全部
6.分区分表:
(1)分区:将数据分段划分在多个位置存放
(2)分表:子表
垂直拆分:分离冷热数据
水平拆分
7.数据库服务器架构:
通过主从复制来同步数据(是异步的),再通过读写分离来提升数据库的并发负载能力