mysql由於輕量級,倍受大家歡迎,因此在這裡先分享一下其中的各種儲存引擎。
isam
在mysql5.1以上的版本已經不支援;該引擎讀取速度非常快並且不佔什麼記憶體,但有個明顯的弊端,不支援外來鍵約束、無法容錯、不支援索引。
innodb儲存引擎
innodb是事務型資料庫的首選引擎,支援事務安全表(acid),支援行鎖定和外來鍵,上圖也看到了,innodb是預設的mysql引擎。innodb主要特性有:
1、innodb給mysql提供了具有提交、回滾和崩潰恢復能力的事物安全(acid相容)儲存引擎。innodb鎖定在行級並且也在select語句中提供乙個類似oracle的非鎖定讀。這些功能增加了多使用者部署和效能。在sql查詢中,可以自由地將innodb型別的表和其他mysql的表型別混合起來,甚至在同乙個查詢中也可以混合
2、innodb是為處理巨大資料量的最大效能設計。它的cpu效率可能是任何其他基於磁碟的關係型資料庫引擎鎖不能匹敵的
3、innodb儲存引擎完全與mysql伺服器整合,innodb儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。innodb將它的表和索引在乙個邏輯表空間中,表空間可以包含數個檔案(或原始磁碟檔案)。這與myisam表不同,比如在myisam表中每個表被存放在分離的檔案中。innodb表可以是任何尺寸,即使在檔案尺寸被限制為2gb的作業系統上
4、innodb支援外來鍵完整性約束,儲存表中的資料時,每張表的儲存都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,innodb會為每一行生成乙個6位元組的rowid,並以此作為主鍵
5、innodb被用在眾多需要高效能的大型資料庫站點上
innodb不建立目錄,使用innodb時,mysql將在mysql資料目錄下建立乙個名為ibdata1的10mb大小的自動擴充套件資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5mb大小的日誌檔案
myisam儲存引擎
myisam基於isam儲存引擎,並對其進行擴充套件。它是在web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。myisam擁有較高的插入、查詢速度,但不支援事物。myisam主要特性有:
1、大檔案(達到63位檔案長度)在支援大檔案的檔案系統和作業系統上被支援
2、當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合併相鄰被刪除的塊,以及若下乙個塊被刪除,就擴充套件到下一塊自動完成
3、每個myisam表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16
4、最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,乙個超過1024位元組的鍵將被用上
5、blob和text列可以被索引
6、null被允許在索引的列中,這個值佔每個鍵的0~1個位元組
7、所有數字鍵值以高位元組優先被儲存以允許乙個更高的索引壓縮
8、每個myisam型別的表都有乙個auto_increment的內部列,當insert和update操作的時候該列被更新,同時auto_increment列將被重新整理。所以說,myisam型別表的auto_increment列更新比innodb型別的auto_increment更快
9、可以把資料檔案和索引檔案放在不同目錄
10、每個字元列可以有不同的字符集
11、有varchar的表可以固定或動態記錄長度
12、varchar和char列可以多達64kb
使用myisam引擎建立資料庫,將產生3個檔案。檔案的名字以表名字開始,副檔名之處檔案型別:frm檔案儲存表定義、資料檔案的擴充套件名為.myd(mydata)、索引檔案的副檔名時.myi(myindex)
memory儲存引擎
memory儲存引擎將表中的資料儲存到記憶體中,未查詢和引用其他表資料提供快速訪問。memory主要特性有:
1、memory表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度
2、memory儲存引擎執行hash和btree縮影
3、可以在乙個memory表中有非唯一鍵值
4、memory表使用乙個固定的記錄長度格式
5、memory不支援blob或text列
6、memory支援auto_increment列和對可包含null值的列的索引
7、memory表在所由客戶端之間共享(就像其他任何非temporary表)
8、memory表記憶體被儲存在記憶體中,記憶體是memory表和伺服器在查詢處理時的空閒中,建立的內部表共享
9、當不再需要memory表的內容時,要釋放被memory表使用的記憶體,應該執行delete from或truncate table,或者刪除整個表(使用drop table)
儲存引擎的選擇
不同的儲存引擎都有各自的特點,以適應不同的需求,如下表所示:
功 能 myisam memory innodb archive
儲存限制 256tb ram 64tb none
支援事物 no no yes no
支援全文索引 yes no no no
支援數索引 yes yes yes no
支援雜湊索引 no yes no no
支援資料快取 no n/a yes no
支援外來鍵 no no yes no
如果要提供提交、回滾、崩潰恢復能力的事物安全(acid相容)能力,並要求實現併發控制,innodb是乙個好的選擇
如果資料表主要用來插入和查詢記錄,則myisam引擎能提供較高的處理效率
如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的memory引擎,mysql中使用該引擎作為臨時表,存放查詢的中間結果
如果只有insert和select操作,可以選擇archive,archive支援高併發的插入操作,但是本身不是事務安全的。archive非常適合儲存歸檔資料,如記錄日誌資訊可以使用archive
使用哪一種引擎需要靈活選擇,乙個資料庫中多個表可以使用不同引擎以滿足各種效能和實際需求,使用合適的儲存引擎,將會提高整個資料庫的效能
mysql引擎總結 MySQL引擎總結
檢視引擎情況 show engines 檢視預設的資料庫配置 show variables like default storage engine 更改資料庫引擎 修改配置檔案my.ini,mysqld 最後新增為上default storage engine innodb,重啟服務 修改某張表的引...
MySQL總結(一) 儲存引擎及各種鎖
儲存引擎在mysql的邏輯架構中位於第三層,負責mysql中的資料的儲存和提取。myisam是mysql的預設資料庫引擎 5.5版之前 雖然效能極佳,而且提供了大量的特性,包括全文索引 壓縮 空間函式等,但myisam不支援事務和行級鎖,而且最大的缺陷就是崩潰後無法安全恢復。不過,5.5版本之後,m...
mysql引擎總結 MySQL儲存引擎總結
儲存引擎 儲存引擎其實就是如何實現儲存資料,如何為儲存的資料建立索引以及如何更新,查詢資料等技術實現的方法。儲存引擎的選擇 1 是否需要支援事務 2 是否需要使用熱備 3 崩潰恢復 能否接受崩潰 4 是否需要外來鍵支援 myisam 1 每當建立乙個myisam引擎的表時,就會在本地磁碟上建立三個檔...