Mysql--回顾提要
一、写在前
知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Mysql干就完事了!
二、来辣!
-
MyISAM表把自增主键最大id记录到文件,重启也不会丢。InnoDB记录到内存,重启数据库和OPTIMIZE操作会丢。
-
Heap表存在于内存,用于临时高速存储。BLOB和TEXT不允许,只能=<>>=<=;不支持自增,索引不可为NULL。
-
InnoDB支持的4中隔离级别,及逐级之间的区别。
-
BLOB和TEXT区别:对BLOB值进行排序和比较大小时区分大小写,对TEXT值不区分。
-
每个MyISAM表以三个文件存储在磁盘:表定义:“.frm”;数据文件:“.MYD”(MYDATA);索引文件:“.MYI”(MYINDEX)。
-
MySQL表格类型:MyISAM、Heap、Merge、InnoDB、ISAM。5.5之前默认引擎是MyISAM,5.5开始是InnoDB。InnoDB是.frm;.ibd(索引和数据)
-
MySQL优化DISTINCT:DISTNCT在所有列上转换为GROUP BY,并与ORDER BY子句结合使用。
-
单个索引最多使用16列创建。
-
允许6种触发器,增删改的前、后。before update
-
强制关机或断电可能会导致数据表损坏。
-
MyISAM支持表锁;InnoDB支持表锁、行锁,默认行锁。还有一个页面锁,粒度在中间。
-
MySQL查询缓存弊端:频繁更新的表,一更新就失效,不安逸。8.0版本被删了。
-
MyISAM和InnoDB区别:InnoDB支持行锁、事务、多版本并发控制(MVVC)、外键、聚集索引;MyISAM支持全文索引,InnoDB部分版本不支持(可使用Sphinx插件)。
-
通过整库备份+binlog可以恢复半个月前日志,前提有备份和日志。
-
优化:尽量使用主键查询:聚簇索引上存储了全部数据,相比普通索引,减少了回表的消耗;MySQL5.6之后引入了索引下推优化,适当使用联合索引,减少回表消耗;若频繁查询某一列,考虑利用覆盖索引避免回表;最左原则:联合索引将高频字段放最左边。
-
数据库三范式:1属性不可再分(每列只有一个值);2每行可以被唯一区分(加主键);3不含其它表已包含了的非主键信息。
-
limit offset由于扫描过多数据越往后查询越慢。存在有序id时:可配合当前页最后一条id进行查询,where id > #{id} limit #{limit}。
-
数据量越来越大导致查询慢:分库分表,根据时间拆分,id最好包含时间(如雪花算法),这样既能根据id直接获取,也能按照时间进行查询。
-
char和varchar区别:char长度固定为声明长度,1~255,存储时用空格填充,检索时删除。
-
候选键和主键:超键(学号+姓名)(学号)。候选键(学号)。主键(学号)。外键(学号在另一张表做外键)。不含多余属性的超键=候选键。我从候选键中选一个作为主键。
-
数据增量大调优:允许数据冗余,避免join查询;字段类型和存储引擎合理,适当添加索引;主从读写分离;合理分表,减少单表数据量提高查询速度;添加缓存;不用select *;
-
锁的优化:读写分离;分段加锁;减少锁持有时间;多线程尽量按顺序获取锁;锁不能过度细化,避免频繁加锁和释放。
-
索引底层和优化:B+树,在所有叶子节点增加了指向下一个叶子节点的指针,所以InnoDB建议大部分表使用自增主键作为主索引。
-
索引失效:以%开头的like语句;OR语句前后没有同时使用索引;数据类型隐式转换(varchar不加单引号可能转成int型)
-
优化MySQL:语句与索引;数据库表结构;系统配置;硬件。
-
优化数据库:选取合适的字段属性,减少字段宽度,尽量设置成not null,省份、性别设置成ENUM;使用join代替子查询;使用联合(UNION)代替手动创建的临时表;事务处理;锁定表,优化事务处理;适用外键,优化锁定表;建立索引;优化查询语句。
-
索引是一种特殊文件,InnoDB的索引是表空间的一部分,包含对数据表里所有记录的引用指针。普通索引唯一任务是加快对数据的访问速度,允许重复值;唯一索引保证数据的唯一性,可以null;主键是特殊的唯一索引,不能为null,用PRIMARY KEY创建;联合索引。
-
防止SQL注入:用#不用$;过滤关键词update、insert、delete、select、*;SQL语句尽量不省略双引号和单引号;数据库表名和字段名命名技巧,防止被猜;开启配置文件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置;执行 sql 语句时使用 addslashes 进行 sql 语句转换。
-
数据定义DDL: Create Table,Alter Table,Drop Table, Craete/Drop Index 等;数据操纵DML: Select ,insert,update,delete;数据控制DCL: grant,revoke ;数据查询DQL: select
-
MVCC:并发版本控制:相当于为每个修改保存一个版本,版本与事务时间戳关联,读操作只读
该事务开始前的数据库快照。它是通过数据库记录中的隐式字段Undo日志、Read Riew操作实现的。好处:并发读写数据库的时候,提高速度;实现读一致性,解决脏读、幻读、不可重复度问题;采用乐观锁或悲观锁操作解决写和写的从冲突。
三、写在后
只是简要知识点概括,看到就能回忆起相关内容为最妙~~直接评论打卡,开整!!!