MySQL系列之七 MySQL存儲引擎
一、MyISAM存儲引擎
缺點:
- 不支持事務
- 最小粒度鎖:表級
- 讀寫相互阻塞,寫入不能讀,讀時不能寫
- 不支持MVCC(支持多版本并發(fā)控制機制)
- 不支持聚簇索引
- 不支持數(shù)據(jù)緩存
- 不支持外鍵
- 崩潰恢復性較差
優(yōu)點:
- 最大支持256TB存儲空間
- 讀取數(shù)據(jù)較快,占用資源較少
MyISAM引擎存儲文件:
- tbl_name.frm: 表格式定義
- tbl_name.MYD: 數(shù)據(jù)文件
- tbl_name.MYI: 索引文件
適用場景:MySQL5.5.5前默認的數(shù)據(jù)庫引擎,在只讀(或者寫較少)、表較?。梢越邮荛L時間進行修復操作)的場景適用
二:InnoDB存儲引擎
特點:
- 64TB
- 支持事務
- 行級鎖
- 支持多版本并發(fā)控制機制(MVCC)
- 支持聚簇索引
- 支持數(shù)據(jù)緩存
- 支持外鍵
InnoDB數(shù)據(jù)庫文件:
- tb_name.frm:表格式定義
- tb_name.ibd :數(shù)據(jù)文件
注意:默認所有的innodb表數(shù)據(jù)文件存儲在數(shù)據(jù)庫目錄下的ibddata1, ibddata2, ... ,這樣極其不方便管理
強烈建議:啟用 innodb_file_per_table=ON,每個表單獨使用一個表空間存儲表的數(shù)據(jù)和索引
啟用:innodb_file_per_table
編輯/etc/my.cnf在[mysqld]下添加 innodb_file_per_table 重啟服務器 # service mysqld restart MariaDB [(none)]> SHOW VARIABLES LIKE 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+
1、管理存儲引擎
查看mysql支持的存儲引擎: MariaDB [(none)]> SHOW ENGINES\G
查看當前默認的存儲引擎:
MariaDB [(none)]> SHOW VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+
設置默認的存儲引擎:
編輯/etc/my.conf在[mysqld]下添加 default_storage_engine = InnoDB
2、InnoDB存儲引擎的緩存
InnoDB存儲引擎的緩沖池通常緩沖池的命中不應該小于99%
相關狀態(tài)變量:
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'innodb%read%'\G
- Innodb_buffer_pool_reads: 表示從物理磁盤讀取頁的次數(shù)
- Innodb_buffer_pool_read_ahead: 預讀的次數(shù)
- Innodb_buffer_pool_read_ahead_evicted: 預讀頁,但是沒有讀取就從緩沖池中被替換的頁數(shù)量,一般用來判斷預讀的效率
- Innodb_buffer_pool_read_requests: 從緩沖池中讀取頁次數(shù)
- Innodb_data_read: 總共讀入的字節(jié)數(shù)
- Innodb_data_reads: 發(fā)起讀取請求的次數(shù),每次讀取可能需要讀取多個頁
Innodb緩沖池命中率 = Innodb_buffer_pool_read_requests / ( Innodb_buffer_pool_read_requests + Innodb_buffer_pool_read_ahead + Innodb_buffer_pool_reads )
平均每次讀取的字節(jié)數(shù) = Innodb_data_read / Innodb_data_reads
三、其他存儲引擎
- Performance_Schema:Performance_Schema數(shù)據(jù)庫;
- Memory :將所有數(shù)據(jù)存儲在RAM中,以便在需要快速查找參考和其他類似數(shù)據(jù)的環(huán)境中進行快速訪問。適用存放臨時數(shù)據(jù)。引擎以前被稱為HEAP引擎;
- MRG_MyISAM:使MySQL DBA或開發(fā)人員能夠對一系列相同的MyISAM表進行邏輯分組,并將它們作為一個對象引用。適用于VLDB(Very Large Data Base)環(huán)境,如數(shù)據(jù)倉庫;
- Archive :為存儲和檢索大量很少參考的存檔或安全審核信息,只支持SELECT和INSERT操作;支持行級鎖和專用緩存區(qū);
- Federated聯(lián)合:用于訪問其它遠程MySQL服務器一個代理,它通過創(chuàng)建一個到遠程MySQL服務器的客戶端連接,并將查詢傳輸?shù)竭h程服務器執(zhí)行,而后完成數(shù)據(jù)存取,提供鏈接單獨MySQL服務器的能力,以便從多個物理服務器創(chuàng)建一個邏輯數(shù)據(jù)庫。非常適合分布式或數(shù)據(jù)集市環(huán)境;
- BDB:可替代InnoDB的事務引擎,支持COMMIT、ROLLBACK和其他事務特性;
- Cluster/NDB:MySQL的簇式數(shù)據(jù)庫引擎,尤其適合于具有高性能查找要求的應用程序,這類查找需求還要求具有最高的正常工作時間和可用性;
- CSV:CSV存儲引擎使用逗號分隔值格式將數(shù)據(jù)存儲在文本文件中??梢允褂肅SV引擎以CSV格式導入和導出其他軟件和應用程序之間的數(shù)據(jù)交換;
- BLACKHOLE :黑洞存儲引擎接受但不存儲數(shù)據(jù),檢索總是返回一個空集。該功能可用于分布式數(shù)據(jù)庫設計,數(shù)據(jù)自動復制,但不是本地存儲;
- example:“stub”引擎,它什么都不做??梢允褂么艘鎰?chuàng)建表,但不能將數(shù)據(jù)存儲在其中或從中檢索。目的是作為例子來說明如何開始編寫新的存儲引擎。
到此這篇關于MySQL系列之七 MySQL存儲引擎的文章就介紹到這了,更多相關MySQL存儲引擎內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL數(shù)據(jù)庫數(shù)據(jù)刪除操作詳解
本文我們將要學習的是作為刪除數(shù)據(jù)使用的?“DELETE”?語句,“DELETE”?語句是用來刪除數(shù)據(jù)的,它不能用來刪除數(shù)據(jù)表本身。刪除數(shù)據(jù)表使用的是?“DROP”?語句,而?“DELETE”?的作用只是用來刪除記錄而已2022-08-08
Oracle10個分區(qū)和Mysql分區(qū)區(qū)別詳解
MySQL分區(qū)常用的是:range、list、hash、key,Oracle10g分區(qū)常用的是:range(范圍分區(qū))、list(列表分區(qū))、hash(哈希分區(qū))、range-hash(范圍—哈希分區(qū))、range-list(列表—復合分區(qū))。下面通過本文詳細給大家介紹Oracle10個分區(qū)和Mysql分區(qū)區(qū)別,一起看看2017-02-02

