摘要:支持崩潰后的安全恢復(fù)。的使用場景更新密集的表存儲引擎特別適合處理多重并發(fā)的更新請求。外鍵約束支持外鍵的存儲引擎只有。引擎是及之前版本的默認(rèn)存儲引擎。文件存儲表的索引。引擎存儲引擎是引擎的變種。
MySQL基礎(chǔ)知識點整理 - 存儲引擎 0. 查看 MySQL 支持的存儲引擎
可以在 mysql 客戶端中,使用 show engines; 命令可以查看MySQL支持的引擎:
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.06 sec)1. InnoDB 引擎
InnoDB 是 MySQL 默認(rèn)的存儲引擎,也是最重要、使用最廣泛的存儲引擎。
InnoDB 的性能和自動崩潰恢復(fù)特性,使得它在非事務(wù)型存儲的需求中也很流行。
除非有非常特別的原因需要使用其他的存儲引擎,否則應(yīng)該優(yōu)先考慮 InnoDB 引擎。
支持事務(wù)。
支持外鍵約束。
支持行級鎖機制。
支持崩潰后的安全恢復(fù)。
通過一些機制和工具支持真正的熱備份。
會在主內(nèi)存中建立其專用的緩沖池用于高速緩沖數(shù)據(jù)和索引,因此InnoDB的表需要更多的內(nèi)存和存儲空間。
InnoDB是聚集索引,數(shù)據(jù)文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過大,因為主鍵太大,其他索引也都會很大。
InnoDB 不保存表的具體行數(shù),執(zhí)行 select count(*) from table 時需要全表掃描。
InnoDB 存儲表和索引有兩種方式使用共享表空間存儲: 表結(jié)構(gòu)保存在 .frm 文件中,數(shù)據(jù)和索引在 innodb_data_home_dir 和 innodb_data_file_path 定義的表空間中,可以是多個文件。
使用多表空間存儲: 表結(jié)構(gòu)保存在 .frm 文件中,每個表的數(shù)據(jù)和索引多帶帶保存在 .ibd 中。
更新密集的表: InnoDB存儲引擎特別適合處理多重并發(fā)的更新請求。
事務(wù): InnoDB存儲引擎是支持事務(wù)的標(biāo)準(zhǔn)MySQL存儲引擎。
自動災(zāi)難恢復(fù): InnoDB表能夠自動從災(zāi)難中恢復(fù)。
外鍵約束: MySQL支持外鍵的存儲引擎只有InnoDB。
支持自動增加列 AUTO_INCREMENT 屬性。
MyISAM 是 MySQL 5.1 及之前版本的默認(rèn)存儲引擎。MySQL 8 即將廢棄 MyISAM 引擎。
MyISAM 提供了全文索引、壓縮、空間函數(shù)(GIS)等特性。
MyISAM 不支持事務(wù)和行級鎖,崩潰后無法安全恢復(fù)。
支持全文索引。
支持表級鎖,不支持行級鎖。
不支持事務(wù)。
擁有較高的插入,查詢速度。
MyISAM 是非聚集索引,數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨立的。
MyISAM 用一個變量保存了整個表的行數(shù),執(zhí)行 select count(*) from table 時只需要讀出該變量即可,速度很快。
MyISAM 的三種存儲格式MyISAM 的三種存儲格式分別為靜態(tài)、動態(tài)和壓縮。MyISAM 會根據(jù)表的定義自動選擇存儲格式。
靜態(tài)表: 如果數(shù)據(jù)表中的各數(shù)據(jù)列的長度都是預(yù)先固定好的,服務(wù)器將自動選擇這種表類型。因為數(shù)據(jù)表中每一條記錄所占用的空間都是一樣的,所以這種表存取和更新的效率非常高。當(dāng)數(shù)據(jù)受損時,恢復(fù)工作也比較容易做。
動態(tài)表: 如果數(shù)據(jù)表中出現(xiàn) varchar 、*text 或 *BLOB 字段時,服務(wù)器將自動選擇這種表類型。相對于靜態(tài)MyISAM,這種表存儲空間比較小,但由于每條記錄的長度不一,所以多次修改數(shù)據(jù)后,數(shù)據(jù)表中的數(shù)據(jù)就可能離散的存儲在內(nèi)存中,進而導(dǎo)致執(zhí)行效率下降。同時,內(nèi)存中也可能會出現(xiàn)很多碎片。因此,這種類型的表要經(jīng)常用 optimize table 命令或優(yōu)化工具來進行碎片整理。
壓縮表: 以上說到的兩種類型的表都可以用myisamchk工具壓縮。如果表在創(chuàng)建并導(dǎo)入數(shù)據(jù)后,不在進行修改操作,這樣的表適合采用 MyISAM 壓縮表。這種類型的表進一步減小了占用的存儲,但是這種表壓縮之后不能再被修改。另外,因為是壓縮數(shù)據(jù),所以這種表在讀取的時候要先時行解壓縮。
每個 MyISAM 表在磁盤上存儲成三個文件,每一個文件的名字均以表的名字開始,擴展名指出文件類型。
.frm 文件存儲表結(jié)構(gòu)定義。
.MYD (MYData) 文件存儲表的數(shù)據(jù)。
.MYI (MYIndex) 文件存儲表的索引。
查詢密集型表: MyISAM 存儲引擎在篩選大量數(shù)據(jù)時非???,是它最突出的優(yōu)點;
插入密集型表: MyISAM 的并發(fā)插入特性允許同時選擇、插入數(shù)據(jù)。例如:MyISAM存儲引擎非常適合管理郵件或Web服務(wù)器日志數(shù)據(jù)。
MEMORY 引擎(也叫 HEAP 引擎),將所有數(shù)據(jù)都保存在內(nèi)存中,不需要進行磁盤I/O。因此,MEMORY表至少比 MyISAM 表快一個數(shù)量級。
MySQL 重啟或 mysqld 守護進程崩潰時,Memory 表的結(jié)構(gòu)還會保留,但是所有的數(shù)據(jù)都會丟失。
獲得速度的同時也帶來一些缺陷。它要求存儲在Memory數(shù)據(jù)表里的數(shù)據(jù)用的是長度不變的格式,這意味著不能用BLOB和TEXT這樣的長度可變的數(shù)據(jù)類型,VARCHAR是種長度可變的類型,但因為它在MySQL內(nèi)部當(dāng)做長度固定不變的CHAR類型,所以可以使用。
MEMORY 的特性數(shù)據(jù)都保存在內(nèi)存中,不需要進行磁盤I/O。
支持 Hash 索引和B樹索引。
支持表級鎖,不支持行級鎖。
服務(wù)重啟后,表結(jié)構(gòu)還會保留,但是數(shù)據(jù)會丟失。
不支持 TEXT 和 BLOB 類型的列。
MEMORY 使用場景需要快速地訪問數(shù)據(jù),并且這些數(shù)據(jù)不會被修改,重啟以后丟失也沒有關(guān)系。
用于查找(lookup)或者映射(mapping)表,例如將郵編和地址映射的表。
用于保存數(shù)據(jù)分析中產(chǎn)生的中間數(shù)據(jù)。
用于緩存周期性聚合數(shù)據(jù)的結(jié)果。
4. ARCHIVE 引擎ARCHIVE 引擎是一個針對插入和壓縮做了優(yōu)化的簡單存儲引擎。
ARCHIVE 引擎只支持 INSERT 和 SELECT 操作。MySQL 5.1 之前也不支持索引。
ARCHIVE 引擎會利用 zlib 對插入的行進行壓縮,所以比 MyISAM 表的磁盤 I/O 更少。
只支持 INSERT 和 SELECT 操作。
MySQL 5.1 之前不支持索引。
支持行級鎖和專用緩沖區(qū)。
ARCHIVE 使用場景適合日志和數(shù)據(jù)采集類應(yīng)用,這類應(yīng)用做數(shù)據(jù)分析時往往需要全表掃描。
需要快速 INSERT 操作的場景。
5. MERGE 引擎MERGE 存儲引擎是 MyISAM 引擎的變種。MERGE 表是由多個 MyISAM 表合并而來的虛擬表,這些MyISAM表結(jié)構(gòu)必須完全相同。Merge表中并沒有數(shù)據(jù),對Merge類型的表可以進行查詢、更新、刪除操作,這些操作實際上是對內(nèi)部的MyISAM表進行操作。
Merge存儲引擎使用場景對于服務(wù)器日志這種信息,一般常用的存儲策略是將數(shù)據(jù)分成很多表,每個名稱與特定時間端相關(guān)。例如:可以用12個相同的表來存儲服務(wù)器的日志數(shù)據(jù),每個表用對應(yīng)各個月份的名字來命名。當(dāng)有必要基于所有12個日志表的數(shù)據(jù)來生成報表時,這意味著需要編寫、更新多表查詢,以反映這些表中的信息。與其編寫這些可能會出現(xiàn)錯誤的查詢,不如將這些表合并起來使用一條查詢,之后再刪除Merge表而不影響原來的數(shù)據(jù),刪除Merge表只會刪除掉Merge表的定義,對內(nèi)部表沒有任何影響。
但是引入分區(qū)功能后,該引擎已經(jīng)被放棄。
6. CSV 引擎CSV 引擎可以將普通的 CSV 文件作為 MySQL 的表來處理,但是這種表不支持索引。
CSV 的特點可以將普通的 CSV 文件作為 MySQL 的表來處理。
所有的列必須都是不能為NULL的
不支持索引(不適合大表,不適合在線處理)
可以對數(shù)據(jù)文件直接編輯(保存文本文件內(nèi)容)
CSV 使用場景適合做為數(shù)據(jù)交換的中間表(能夠在服務(wù)器運行的時候,拷貝和拷出文件,可以將電子表格存儲為CSV文件再拷貝到MySQL數(shù)據(jù)目錄下,就能夠在數(shù)據(jù)庫中打開和使用。同樣,如果將數(shù)據(jù)寫入到CSV文件數(shù)據(jù)表中,其它web程序也可以迅速讀取到數(shù)據(jù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31782.html
摘要:基礎(chǔ)知識點整理數(shù)據(jù)表管理數(shù)據(jù)類型數(shù)值數(shù)據(jù)類型數(shù)值數(shù)據(jù)類型存儲數(shù)值。支持多種數(shù)值數(shù)據(jù)類型,每種存儲的數(shù)值具有不同的取值范圍。是定長字符串,會直接根據(jù)定義字符串時指定的長度分配足夠的空間。 MySQL基礎(chǔ)知識點整理 - 數(shù)據(jù)表管理 〇、數(shù)據(jù)類型 1. 數(shù)值數(shù)據(jù)類型 數(shù)值數(shù)據(jù)類型存儲數(shù)值。MySQL支持多種數(shù)值數(shù)據(jù)類型,每種存儲的數(shù)值具有不同的取值范圍。 整數(shù) 類型 大小 范圍(有符號)...
閱讀 4324·2021-09-24 09:47
閱讀 1197·2021-09-03 10:33
閱讀 2083·2019-08-30 11:13
閱讀 1042·2019-08-30 10:49
閱讀 1765·2019-08-29 16:13
閱讀 2055·2019-08-29 11:28
閱讀 3103·2019-08-26 13:31
閱讀 3643·2019-08-23 17:14