存儲引擎說白了就是如何存儲數(shù)據(jù)、如何為存儲的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術的實現(xiàn)方法。因為在關系數(shù)據(jù)庫中數(shù)據(jù)的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)
在Oracle 和SQL Server等數(shù)據(jù)庫中只有一種存儲引擎,所有數(shù)據(jù)存儲管理機制都是一樣的。而MySql數(shù)據(jù)庫提供了多種存儲引擎。
用戶可以根據(jù)不同的需求為數(shù)據(jù)表選擇不同的存儲引擎,用戶也可以根據(jù)自己的需要編寫自己的存儲引擎。
查看引擎:
mysql> show engines;
mysql> SHOW VARIABLES LIKE '%storage_engine%';
mysql> show create table t1;
mysql> show table status like 't1';
關閉不必要的引擎:
不想用哪個,加上跳過哪個就可以,重啟mysql,這樣也可以優(yōu)化數(shù)據(jù)庫。
默認如果不想他們啟動的話,修改配置文件
#vim /etc/my.cnf
[mysqld]
skip-mrg_myisam
skip-csv
skip-memory
臨時指定引擎:
mysql> create table innodb1(id int)engine=innodb;
修改默認引擎:
/etc/my.cnf
[mysqld]
default-storage-engine=INNODB
修改已經存在的表的引擎:
mysql> alter table t2 engine=myisam;
MyISAM存儲引擎
由于該存儲引擎不支持事務、也不支持外鍵,所以訪問速度較快。因此當對事務完整性沒有要求并以訪問為主的應用適合使用該存儲引擎。
.myi index 存儲索引
.myd data 存儲數(shù)據(jù)
.frm 存儲表結構
InnoDB存儲引擎
由于該存儲引擎在事務上具有優(yōu)勢,即支持具有提交、回滾及崩潰恢復能力等事務特性,所以比MyISAM存儲引擎占用更多的磁盤空間。
因此當需要頻繁的更新、刪除操作,同時還對事務的完整性要求較高,需要實現(xiàn)并發(fā)控制,建議選擇。
大型數(shù)據(jù)庫用innodb
[root@www var]# pwd
/usr/local/mysql/var
[root@www var]# ls ib*
ibdata1 ib_logfile0 ib_logfile1
innodb類型的表的數(shù)據(jù)存在ibdata1里面,不像myisam生成3個文件, ib_logfile0 ib_logfile1存放日志
初始是10M,每次增加8M ,初始大小可以指定,要修改配置文件
#vim /etc/my.cnf
innodb_data_file_path=ibdata1:20M:autoextend:max:1000M
設定初始大小是20M,增幅也是8M 設定峰值是1000M,就是指定最大能增加到1000M
innodb_data_home_dir=/data
指定他的存儲數(shù)據(jù)的位置,也就是ibdata1的位置
數(shù)據(jù)分開存儲:
比放在一塊硬盤里訪問速度快
默認的數(shù)據(jù)都保存在var下面,可以人為的改變他們的存儲位置
只適用于innodb類型,.frm文件必須得放在var下,不能指定放到別的地方
#mkdir data 最好是不同的硬盤上
#chown mysql data
mysql> create table tb1(name char(20)) data directory='/data';
data directory=指定數(shù)據(jù)文件的位置
MEMORY
速度快,比myisam快30%,當數(shù)據(jù)庫重啟之后,數(shù)據(jù)就會丟失,因為他是存在內存里的.適合于需要快速的訪問或臨時表。
mysql> create table t20(id int,name char(10)) type=memory; 創(chuàng)建一個memory類型的表
BLACKHOLE
黑洞存儲引擎,可以應用于主備復制中的分發(fā)主庫。
mysql> desc blackhole1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> insert into blackhole1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from blackhole1;
Empty set (0.00 sec)
常用存儲引擎
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 存儲引擎 提供了訪問遠程Mysql服務器上的表的方法 本地不存儲數(shù)據(jù),但數(shù)據(jù)放在遠程服務器上 本地需要...
- MySQL默認引擎Innodb Innodb使用表空間進行數(shù)據(jù)存儲 控制參數(shù):innidb_file_per_ta...
- 系統(tǒng)存儲引擎特點 也稱HEAP存儲引擎,數(shù)據(jù)保存在內存中,重啟mysql數(shù)據(jù)會消失,表結構存在。(表結構存在....
- InnoDB是MySQL的默認存儲引擎,被設計用來處理大量的短期(short-lived)事務,短期事務大部分情況...