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