資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統(dbms)使用資料引擎進行建立、查詢、更新和刪除資料。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。mysql的核心就是儲存引擎。
1. mysql提供了查詢儲存引擎的功能,可以使用:
show engines
2. 如果要想檢視資料庫預設使用哪個引擎,可以通過使用命令:
show variables like 'storage_engine';
在mysql中,不需要在整個伺服器中使用同一種儲存引擎,針對具體的要求,可以對每乙個表使用不同的儲存引擎。support列的值表示某種引擎是否能使用:yes表示可以使用、no表示不能使用、default表示該引擎為當前預設的儲存引擎 。下面來看一下其中幾種常用的引擎。
innodb是事務型資料庫的首選引擎,支援事務安全表(acid),其它儲存引擎都是非事務安全表,支援行鎖定和外來鍵,mysql5.5以後預設使用innodb儲存引擎。
innodb主要特性:
為mysql提供了具有提交、回滾和崩潰恢復能力的事務安全(acid相容)儲存引擎。innodb鎖定在行級並且也在 select語句中提供乙個類似oracle的非鎖定讀。這些功能增加了多使用者部署和效能。在sql查詢中,可以自由地將innodb型別的表和其他mysql的表型別混合起來,甚至在同乙個查詢中也可以混合。
innodb是為處理巨大資料量的最大效能設計。它的cpu效率可能是任何其他基於磁碟的關係型資料庫引擎鎖不能匹敵的。
innodb儲存引擎完全與mysql伺服器整合,innodb儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。innodb將它的表和索引在乙個邏輯表空間中,表空間可以包含數個檔案(或原始磁碟檔案)。這與myisam表不同,比如在myisam表中每個表被存放在分離的檔案中。innodb表可以是任何尺寸,即使在檔案尺寸被限制為2gb的作業系統上
innodb支援外來鍵完整性約束,儲存表中的資料時,每張表的儲存都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,innodb會為每一行生成乙個6位元組的rowid,並以此作為主鍵
innodb被用在眾多需要高效能的大型資料庫站點上
innodb不建立目錄,使用innodb時,mysql將在mysql資料目錄下建立乙個名為ibdata1的10mb大小的自動擴充套件資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5mb大小的日誌檔案
myisam基於isam儲存引擎,並對其進行擴充套件。它是在web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。myisam擁有較高的插入、查詢速度,但不支援事務。
myisam主要特性:
大檔案(達到63位檔案長度)在支援大檔案的檔案系統和作業系統上被支援。
當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合併相鄰被刪除的塊,以及若下乙個塊被刪除,就擴充套件到下一塊自動完成。
每個myisam表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16
最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,乙個超過1024位元組的鍵將被用上。
blob和text列可以被索引
null被允許在索引的列中,這個值佔每個鍵的0~1個位元組
所有數字鍵值以高位元組優先被儲存以允許乙個更高的索引壓縮
每個myisam型別的表都有乙個auto_increment的內部列,當insert和update操作的時候該列被更新,同時auto_increment列將被重新整理。所以說,myisam型別表的auto_increment列更新比innodb型別的auto_increment更快
可以把資料檔案和索引檔案放在不同目錄
每個字元列可以有不同的字符集
有varchar的表可以固定或動態記錄長度
varchar和char列可以多達64kb
使用myisam引擎建立資料庫,將產生3個檔案。檔案的名字以表名字開始,副檔名之處檔案型別:frm檔案儲存表定義、資料檔案的擴充套件名為.myd(mydata)、索引檔案的副檔名時.myi(myindex)
memory儲存引擎將表中的資料儲存到記憶體中,為查詢和引用其他表資料提供快速訪問。
memory主要特性:
memory表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度
memory儲存引擎執行hash和btree縮影
可以在乙個memory表中有非唯一鍵值
memory表使用乙個固定的記錄長度格式
memory不支援blob或text列
memory支援auto_increment列和對可包含null值的列的索引
memory表在所有客戶端之間共享(就像其他任何非temporary表)
memory表記憶體被儲存在記憶體中,記憶體是memory表和伺服器在查詢處理時的空閒中,建立的內部表共享
當不再需要memory表的內容時,要釋放被memory表使用的記憶體,應該執行delete from或truncate table,或者刪除整個表(使用drop table)
儲存引擎的對比
特性innodb
myisam
memory
事務安全支援無
無儲存限制
64tb有有
空間使用高低
低記憶體使用高低
高插入資料的速度低高
高對外鍵的支援支援無
無只有memory支援雜湊索引,只有myisam支援全文索引。
innodb:支援事務處理,支援外來鍵,支援崩潰修復能力和併發控制。如果需要對事務的完整性要求比較高(比如銀行),要求實現併發控制(比如售票),那選擇innodb有很大的優勢。如果需要頻繁的更新、刪除操作的資料庫,也可以選擇innodb,因為支援事務的提交(commit)和回滾(rollback)。
myisam:插入資料快,空間和記憶體使用比較低。如果表主要是用於插入新記錄和讀出記錄,那麼選擇myisam能實現處理高效率。如果應用的完整性、併發性要求比較低,也可以使用。
memory:所有的資料都在記憶體中,資料的處理速度快,但是安全性不高。如果需要很快的讀寫速度,對資料的安全性要求較低,可以選擇memoey。它對錶的大小有要求,不能建立太大的表。所以,這類資料庫只使用在相對較小的資料庫表。
同乙個資料庫也可以使用多種儲存引擎的表。如果乙個表要求比較高的事務處理,可以選擇innodb。這個資料庫中可以將查詢要求比較高的表選擇myisam儲存。如果該資料庫需要乙個用於查詢的臨時表,可以選擇memory儲存引擎。
資料庫儲存引擎
mysql中提到了儲存引擎這個概念。簡而言之,儲存引擎就是表的型別。資料庫的儲存引擎決定了表在計算機中的儲存方式。show engines語句可以檢視mysql資料庫支援的儲存引擎。innodb儲存引擎給mysql的表提供了事物,回滾,崩潰修復和多版本併發控制的事物安全。innodb是mysql上第...
資料庫儲存引擎
儲存引擎 處理表的處理器 1 基本操作 1 檢視所有的儲存引擎 show engines 2 檢視已有表的儲存引擎 show create table 表名 engine innodb 3 建立表時指定儲存引擎 create table 表名 engine myisam 4 工作中常用儲存引擎 in...
資料庫儲存引擎
資料庫引擎簡單來說就是乙個 資料庫發動機 當你訪問資料庫時,不管是手工訪問,還是程式訪問,都不是直接讀寫資料庫檔案,而是通過資料庫引擎去訪問資料庫檔案。以關係型資料庫為例,你發sql語句給資料庫引擎,資料庫引擎解釋sql語句,提取出你需要的資料返回給你。因此,對訪問者來說,資料庫引擎就是sql語句的...