第3章 Mysql架构和索引及性能优化
3.1 Mysql架构
1.逻辑架构图一:
2.逻辑架构图二:
3.执行流程图:
3.2 存储引擎介绍:
* 多存储引擎是mysql有别于其他数据库的一大特性;
*存储引擎是针对表的
* MySQL 5.5之后,默认的存储引擎由MyISAM变为InnoDB。
* 查看存储引擎:show engines;
Innodb
Myisam
存储文件
.frm 表定义文件
.ibd 数据文件
.frm 表定义文件
.myd 数据文件
.myi 索引文件
锁
表锁、行锁
表锁
事务
ACID
不支持
CRDU
读、写
读多
count
扫表
专门存储的地方
索引结构
B+ Tree
B+ Tree
3.1 索引的存储结构:
B Tree和B+ Tree的特点与区别
* 树的高度一般都是在2-4这个高度,树的高度直接影响IO读写的次数。
* 如果是三层树结构---支撑的数据可以达到20G,如果是四层树结构---支撑的数据可以达到几十T
* B Tree和B+ Tree的最大区别在于非叶子节点是否存储数据的问题。B Tree是非叶子节点和叶子节点都会存储数据。而B+ Tree只有叶子节点才会存储数据,而且存储的数据都是在一行上,而且这些数据都是有指针指向的,也就是由顺序的。
非聚集索引
* 叶子节点只会存储数据行的指针,简单来说数据和索引不在一起,就是非聚集索引。
* 主键索引和辅助索引都会存储指针的值
聚集索引(InnoDB)
* 主键索引(聚集索引)的叶子节点会存储数据行,也就是说数据和索引是在一起,这就是聚集索引。
* 辅助索引只会存储主键值
* 如果没有没有主键,则使用唯一索引建立聚集索引;如果没有唯一索引,MySQL会按照一定规则创建聚集索引。
3.2 Mysql性能优化之慢查询
MySQL 数据库有一个“慢查询日志”功能,
MySQL的慢查询日志功能,默认是关闭的,需要手动开启。
查看是否开启慢查询功能,slow_query_log_file=OFF则没有开启,若为ON则为开启;
临时开启慢查询功能:
在 MySQL 执行 SQL 语句设置,但是如果重启 MySQL 的话将失效
mysql>set global slow_query_log = ON;
mysql>set global long_query_time = 1;
永久开启慢查询功能:
修改/etc/my.cnf配置文件,重启 MySQL, 这种永久生效.
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
慢日志格式:
mysql>select sleep(3);
2.4 Mysql性能分析语句show profile
lQuery Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方。(通常需要手动开启)
lshow profile和show profiles语句可以展示当前会话(退出session后,profiling重置为0) 中执行语句的资源使用情况.
lshow profiles:以列表形式显示最近发送到服务器上执行的语句的资源使用情况.显示的记录数由变量:profiling_history_size控制,默认15条
查看profile是否开启,OFF(关闭),ON(开启)
*select @@profiling;
* show variables like ‘%profil%’;
开启:set profiling=1;
2.4Mysql性能优化细节