一、文件结构
1、配置文件
/etc/my.cnf
2、数据文件位置
/var/lib/mysql
3、日志文件
1)通用日志文件,默认关闭,查看show global variables like 'general_log';
2)二进制文件,默认关闭,开启log-bin=mysql-bin
3)慢查询日志文件,默认关闭
#开启慢查询日志 slow_query_log=ON
#慢查询的阈值 long_query_time=10
#日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名, 但不是绝对路径名,文件则写入数据目录。 slow_query_log_file= file_name。
查询多少SQL超过了慢查询时间的阈值: SHOW GLOBAL STATUS LIKE '%Slow_queries%';
4)错误日志文件,默认开启,而且从5.5.7以后无法关闭错误日志
4、数据文件
1)InnoDB引擎
.frm,表结构定义
.idb文件,表索引和详细数据信息
2)ibdata1,系统表空间文件
3)ib_logfile0、ib_logfile1,重做日志文件
二、事务
1、四大特性
原子性、一致性、隔离性、持久性
2、隔离级别
RU(读未提交),脏读
RC(读已提交),不可重复读
RR(可重复读),幻读,mysql默认隔离级别,用间隙锁解决幻读
SERILIZABLE(串行化)
3、并发控制
LBCC(基于锁的并发控制,写写)
MVCC(基于版本的并发控制,读写),使用readview控制读操作
当前读(加锁)、快照读
三、索引
1、数据结构
hash表、二叉树、平衡二叉树
B树,非叶子节点和叶子节点都会存储数据。
B+树,只有叶子节点才会存储数据,非叶子节点至存储键值。叶子节点之间使用双向指针连接,最底层 的叶子节点形成了一个双向有序链表。相比于B树优势,层级低、范围查询快。
2、MyIsam引擎
主键索引和辅助索引存储结构一样,索引的叶子节点保存的是数据行对应的地址信息。
3、InnoDB引擎
主键索引,主键索引的叶子节点会存储数据行,辅助索引只会存储主键值。
辅助索引,除主键索引之外的所有索引都称为辅助索引。使用辅助索引需要检索两遍索引,首先检索辅助索引获得主键,然后使用主键到主索引中检索获得记录。
is null可以使用索引
四、锁
1、功能分类,共享锁(读锁S锁)、排他锁(写锁X锁)
2、类型分类,记录锁、间隙锁、临键锁(记录锁+间隙锁)
3、根据辅助索引更新,在辅助索引上加间隙锁,对应的主键索引上加记录锁
4、查看状态,show status like 'innodb_row_lock%';
Innodb_row_lock_time_avg(等待平均时长)
Innodb_row_lock_waits(等待总次数)
Innodb_row_lock_time(等待总时长)
select * from information_schema.innodb_locks;
select * from information_schema.innodb_lock_waits;
select * from information_schema.innodb_trx;
五、性能优化
1、分析慢查询日志的工具mysqldumpslow
2、查看执行计划重要参数
1)select_type,simple、primary、union、subquery
2)type,const主键或唯一索引、eq_ref主键或唯一索引等值关联、ref非唯一索引、range范围索引、index覆盖索引、all全表扫描
3)extra,using index覆盖索引,using where过滤条件无索引