一、MySql逻辑架构
1.连接层
2.SQL服务层
组成部分
(1)Sql Interface: 处理sql命令的接收及结果的返回 (2)Parser: 解析器,解析sql (3)Optimizer: 优化器,优化sql (4)Caches&Buffer: 缓存
查询命令的执行流程
解析器
优化器
explain SQL查询语句 :查看查询计划
- 缓存
sql的缓存是默认的,数据缓存需要手动开启(在my.cnf(linux)文件中配置)
// 查看缓存是否开启
show variables like '%query_cache_type%'
// 设置缓存大小
SET GLOBAL query_cache_size = 4000;
SET GLOBAL query_cache_size = 134217728;
3. 引擎层
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
- MyISAM
(1)MyISAM是Mysql5.5之前建表的默认引擎
(2)MyISAM创建表示创建的文件有三种如下案例
mysql> create table t1(id int)ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)
[root@192 mysql]# ll ...... drwxr-x---. 2 mysql mysql 62 Jul 5 01:47 test [root@192 mysql]# cd test/ [root@192 test]# ll total 20 -rw-r-----. 1 mysql mysql 65 Jul 5 01:32 db.opt -rw-r-----. 1 mysql mysql 8556 Jul 5 01:47 t1.frm -rw-r-----. 1 mysql mysql 0 Jul 5 01:47 t1.MYD -rw-r-----. 1 mysql mysql 1024 Jul 5 01:47 t1.MYI
.frm文件: 存储表结构的文件,任何引擎都有的文件 .MYD文件: 存储库数据的文件 .MYI文件: 存储索引的文件
(3)特性
--并发性及锁级别:表锁 --支持全文索引 --支持数据压缩 myisampack -b -f tableName.MYI
(4)适合场景
--支持非事务场景(数据仓库、报表、日志数据) --只读类应用 --空间类应用(空间函数、坐标)
- Innodb
(1)Innodb是Mysql5.5以后建表的默认引擎
(2)innodb_file_per_table
mysql> show variables like '%innodb_file_per_table%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+
1 row in set (0.00 sec)
----ON : 独立表空间(Mysql5.6及以后默认独立表空间)
----OFF : 系统表空间
案例一:验证独立表空间(独立表空间在目录下生成".frm"文件和".idb"文件) mysql> use test; Database changed mysql> set global innodb_file_per_table=1; Query OK, 0 rows affected (0.00 sec) mysql> create table t2(id int,name varchar(100)); Query OK, 0 rows affected (0.03 sec) mysql> show variables like '%datadir%'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.00 sec)
[root@192 ~]# cd /var/lib/mysql/ [root@192 mysql]# ll ....... drwxr-x---. 2 mysql mysql 90 Jul 5 05:04 test [root@192 mysql]# cd test [root@192 test]# ll total 128 ....... ( /var/lib/mysql/test) -rw-r-----. 1 mysql mysql 8586 Jul 5 05:04 t2.frm -rw-r-----. 1 mysql mysql 98304 Jul 5 05:04 t2.ibd
案例二:验证系统表空间(在/var/lib/mysql 下生成共有的文件ibdataX,在/var/lib/mysql/test 下生成.frm文件) mysql> use test Database changed mysql> set global innodb_file_per_table=0; Query OK, 0 rows affected (0.00 sec)
mysql> create table t3(id int,name varchar(100)); Query OK, 0 rows affected (0.01 sec) [root@192 test]# pwd /var/lib/mysql/test [root@192 test]# ll ...... -rw-r-----. 1 mysql mysql 8586 Jul 5 05:08 t3.frm [root@192 test]# cd ../ [root@192 mysql]# ll total 188488 ...... -rw-r-----. 1 mysql mysql 79691776 Jul 5 05:09 ibdata1 ...... [root@192 mysql]# pwd /var/lib/mysql
(3)系统表空间和独立表空间区别
- 系统表空间无法简单的收缩表空间的大小
- 独立表空间可以通过optimize tableName收缩文件大小
- 系统表空间会产生IO瓶颈
- 独立表空间可以向多个文件刷新数据
(4)特性
- Innodb是一种事务性存储引擎
2.完全支持事务ACID的特性 3. Redo log和Undo log 4. Innodb支持行级锁(并发程度更高)
(5)适合场景
有事务处理的业务(OLTP)
(6)MyISAM与Innodb的比较
对比项
MyISAM
InnoDB
主外键
不支持
支持
事务
不支持
支持
行表锁
表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作行
行锁,操作时只锁某一行,不对其它行有影响;适合高并发的操作
缓存
只缓存索引,不缓存真实数据
不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
表空间
小
大
关注点
性能
事务
默认安装
Y
Y
4 存储层
数据文件及日志文件