一、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)系統表空間和獨立表空間區別
1. 系統表空間無法簡單的收縮表空間的大小
2. 獨立表空間可以通過optimize tableName收縮文件大小
3. 系統表空間會產生IO瓶頸
4. 獨立表空間可以向多個文件刷新數據
- (4)特性
1. Innodb是一種事務性存儲引擎
2.完全支持事務ACID的特性
3. Redo log和Undo log
4. Innodb支持行級鎖(併發程度更高)
- (5)適合場景
有事務處理的業務(OLTP)
- (6)MyISAM與Innodb的比較
對比項 | MyISAM | InnoDB |
---|---|---|
主外鍵 | 不支持 | 支持 |
事務 | 不支持 | 支持 |
行表鎖 | 表鎖,即使操作一條記錄也會鎖住整個表,不適合高併發的操作行 | 行鎖,操作時只鎖某一行,不對其它行有影響;適合高併發的操作 |
緩存 | 只緩存索引,不緩存真實數據 | 不僅緩存索引還要緩存真實數據,對內存要求較高,而且內存大小對性能有決定性的影響 |
表空間 | 小 | 大 |
關注點 | 性能 | 事務 |
默認安裝 | Y | Y |
4 存儲層
數據文件及日誌文件