第3章    Mysql架构和索引及性能优化

3.1  Mysql架构

1.逻辑架构图一:

索引管理的索引模版跟组建模板_mysql

2.逻辑架构图二:

索引管理的索引模版跟组建模板_mysql_02

3.执行流程图:

索引管理的索引模版跟组建模板_MySQL_03

索引管理的索引模版跟组建模板_慢查询_04

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_05

临时开启慢查询功能:

在 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条

索引管理的索引模版跟组建模板_慢查询_06

索引管理的索引模版跟组建模板_MySQL_07

索引管理的索引模版跟组建模板_索引管理的索引模版跟组建模板_08

查看profile是否开启,OFF(关闭),ON(开启)

*select @@profiling;

* show variables like ‘%profil%’;

开启:set profiling=1;

2.4Mysql性能优化细节

索引管理的索引模版跟组建模板_mysql_09