1.存儲引擎的概念
當一個大型的系統存在性能瓶頸是,我們采用分庫處理時多存儲引擎的優勢就發揮出來了。
2.查看存儲引擎
查詢所有的引擎:
show engines;
當前使用的引擎:
show variables like '%storage_engine%'
3.MYISAM與InnoDB的區別
二:詳細說明
1.myIsam
表級鎖定
讀寫相互阻塞,寫入不能讀,讀時不能寫
只緩存索引
不支持外鍵約束
不支持聚簇索引
讀取數據較快,占用資源較少
不支持MVCC(多版本並發控制機制)高並發
崩潰恢復性較差
MySQL5.5.5前默認的數據庫引擎
使用這個存儲引擎,每個MyISAM在磁盤上存儲成三個文件。
(1)frm文件:存儲表的定義數據
(2)MYD文件:存放表具體記錄的數據
(3)MYI文件:存儲索引
frm和MYI可以存放在不同的目錄下。MYI文件用來存儲索引,但僅保存記錄所在頁的指針,索引的結構是B+樹結構。
2.innodb
對Innodb的特點做以下總結;
更新密集的表。InnoDB存儲引擎特別適合處理多重並發的更新請求。
事務。InnoDB存儲引擎是支持事務的標准MySQL存儲引擎。
自動災難恢復。與其它存儲引擎不同,InnoDB表能夠自動從災難中恢復。
外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。
支持自動增加列AUTO_INCREMENT屬性。
支持行級鎖。
具有非常高效的緩存特性:能緩存索引,也能緩存數據。
支持分區,表空間,類似oracle數據庫。
讀寫阻塞與事務隔離級別相關
支持聚簇索引
支持MVCC高並發
從MySQL5.5后支持全文索引
innodb_file_per_table on:表示獨立表空間,OFF:表示系統表空間。5.6之前是系統表空間,之后為獨立表空間。
3.memory
將數據存在內存,為了提高數據的訪問速度,每一個表實際上和一個磁盤文件關聯。文件是frm。
(1)支持的數據類型有限制,比如:不支持TEXT和BLOB類型,對於字符串類型的數據,只支持固定長度的行,VARCHAR會被自動存儲為CHAR類型;
(2)支持的鎖粒度為表級鎖。所以,在訪問量比較大時,表級鎖會成為MEMORY存儲引擎的瓶頸;
(3)由於數據是存放在內存中,一旦服務器出現故障,數據都會丟失;
(4)查詢的時候,如果有用到臨時表,而且臨時表中有BLOB,TEXT類型的字段,那么這個臨時表就會轉化為MyISAM類型的表,性能會急劇降低;
(5)默認使用hash索引。
(6)如果一個內部表很大,會轉化為磁盤表。
4.csc
數據以文本方式存儲,表的字段不能為空,不能有主鍵。
.frm , .csv數據的內容, .csm存儲表的元數據 。
使用文本編輯器可以直接編輯.csv數據,然后保存,在數據庫里面執行flush tables;
要在最后一行數據回車一下,要不然最后一條數據不展示。
特點:
以CSV格式進行數據存儲,所有列的字段都不能為null,不支持索引,可以對數據文件在線編輯。
5.archive
以zlib對表數據進行壓縮,磁盤I/O更少,數據存儲在.ARZ。
.frm , .ARZ數據的內容。
特點:
只支持insert和select操作,只允許在自增ID列上加索引。
使用場景:
日志和數據采集應用
6.Federated
訪問遠程的數據庫表,本地只保存數據庫結構和連接信息,數據保存在遠程的服務器中。在本地只保存.frm
默認不是開啟的引擎,在my.ini 增加 federated=1,重啟。
只能用命令創建。create table ‘aaa’(里面的字段,要和連接的服務器一樣) engine=federated connection='mysql://用戶名:密碼@地址:IP/數據庫名/表名'