一、【mysql儲存引擎概述】
外掛程式式儲存引擎是mysql資料庫重要特徵之一
5.5之前的預設儲存引擎為myisam
5.5之後的預設儲存引擎為innodb
如果要修改預設的儲存引擎,可以在引數檔案中設定default_table_type;
查詢當前資料庫支援的儲存引擎:show engines \g
可以通過建立表語句設定指定表的儲存引擎:
①create table ai
(id bigint(20) not null auto_increment,
primary key (id)
) engine=innodb default charset=gbk;
②alter table ai engine = myisam;
二、【各種儲存引擎的特性】
(1)、myisam
①索引:btree索引、全文索引
②表鎖③不支援事務,不支援外來鍵,批量插入效率高(高於innodb),訪問速度快,適合select,insert為主的業務場景
④每個myisam表在磁碟上儲存3個檔案,檔名與表名相同,副檔名
.frm:儲存表定義(表結構)
.myd:mydata,儲存資料
.myi:myindex,儲存索引
資料檔案和索引檔案可以放在不同的目錄,平均分布io,獲得更快的速度,且不同的myisam表的資料檔案和索引檔案可以放置在不同的目錄,
在建立myisam表時,通過data directory 和index directory語句指定,檔案路徑需要絕對路徑,且具有訪問許可權
⑤myisam表可能被損壞,通過check table 語句檢查表健康,通過repair table語句修復乙個損壞的myisam表,myisam的損壞可能會導致資料庫重啟
⑥支援三種不同的儲存格式:靜態表(固定長度)、動態表、壓縮表
靜態表(fixed):預設的儲存格式,欄位為非變長字段,每個記錄都是固定長度,優點儲存迅速,容易快取,出現故障易恢復,缺點為占用的空間比動態表多。儲存時,會按照字段定義的長度補足空格,
但是在訪問資料時,會自動去除尾部的空格(易誤刪空格,導致資料不準確)。
動態表(dynamic):包含變長字段,記錄不是固定長度的,占用空間較少,但是頻繁的更新與刪除會產生碎片,需要定期的執行optimize table語句優化,故障恢復相對困難
壓縮表(compressed):由myisampack工具建立,佔據非常小的磁碟空間。每個記錄被單獨壓縮,訪問開支小
當你對乙個沒有blob或text型別的表操作時,可以在create table時,通過row_format表選項,強制表的儲存格式為fixed或dynamic,這會導致char和varchar型別欄位因fixed儲存格式變為char(因為char型別字段
會自動補全空格),因dynamic儲存格式改為varchar。
⑦查詢時,按照組合索引前幾列排序遞增
(2)、innodb
①索引:btree索引
②行鎖③支援事務(提供了具有提交、回滾、崩潰恢復能力的事務安全)、支援外來鍵、相對於myisam儲存引擎,innodb寫的效率差一些,並占用更多的磁碟空間來儲存資料和索引
④自動增長列:innodb自動增長列可以手工插入,當插入的值為null或0時,實際插入的值為自動增長後的值,可以通過alter table 名字 auto_increment = n;來設定自動增長列的初始值,但是初始值儲存在
記憶體中,重啟資料庫後,需要重新設定;
⑤對於innodb而言,自動增長列必需是索引。如果是組合索引,也必須是索引的第一列。
⑥支援外來鍵(mysql唯一乙個支援外來鍵的儲存引擎)
⑦innodb儲存表和索引有2中儲存方式:
共享表空間儲存:這種方式建立的表的表結構儲存在.frm檔案中,資料和索引儲存在innodb_data_home_dir和innodb_data_file_path定義的表空間中,可以是多個檔案
多表空間儲存:表結構仍然儲存在.frm檔案中,但是每個表的資料和索引單獨儲存在.ibd檔案中,如果是個分割槽表,每個分割槽對應單獨的.ibd檔案,檔名是表名+分割槽名,可以在建立分割槽的時候,
指定每個分割槽的資料檔案的位置,以此來將表的io均勻分布在多個磁碟上。
⑧要使用多表空間的儲存方式,需要設定引數innodb_file_per_table,並重新啟動服務才可生效。對於新建的表,按照多表空間的儲存方式,已有的表仍然使用共享表空間,如果將多表空間儲存方式修改回
共享空間儲存格式,則新建的表會在共享空間中建立,但已有的多表空間的表仍然儲存原來的訪問方式,所以,多表空間引數生效後,只對新建的表生效。
(3)、memory
①索引:btree索引、hash索引(預設使用)
②表鎖③memory儲存引擎使用存在於記憶體中的內容來建立表。每個memory表實際只對應乙個磁碟檔案,格式為.frm。
④可以指定索引型別: create index mem_hash_idx using hash on 表名(欄位名);
drop index mem_hash_idx on 表名;
⑤在啟動mysql服務時,使用init-file選項,把insert into ... select 或 load data infile這樣的語句放入這個檔案中,就可以在服務啟動時,從持久穩固的資料來源裝載表。
⑥max_heap_table_size系統變數約束每個memory表中可放置的資料量大小。
(4)、merge
①索引:btree索引
②表鎖③merge儲存引擎是一組myisam表的組合,這些myisam表結構必須完全相同,merge表本身沒有資料,可進行查詢,更新,刪除操作,這些操作實際上是對內部的myisam表進行的。
④對merge型別表的插入操作,是通過insert_method子句定義插入的表,可以有3個不同的值,first或last值,使得插入操作被相應的作用在第乙個或最後乙個表上,不定義這個子句或定義no,表示
不能對這個merge表執行插入操作。
⑤merge表在磁碟上儲存2個檔案,.frm檔案儲存表定義,另乙個.mrg檔案包含組合表資訊,可以通過.mge檔案修改merge表,但是修改後要通過flush tables重新整理。
⑥create table merge_table (
id bigint(20)
) engine=merge union=(表1,表2) insert_method=last;
⑦merge表並不能智慧型的將記錄寫到對應的表中,而分割槽表是可以的。
mysql儲存引擎 mysql儲存引擎簡介
精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...
mysql個儲存引擎 MySQL儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...
mysql儲存引擎模式 mysql儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...