表的引擎選擇InnoDB

2021-08-15 13:01:53 字數 975 閱讀 1382

從innodb與myisam的區別及支援場景來說明,並給出一些比較明顯的特性和注意點。

效能角度:

1.myisam型別的表強調的是侷限場景下的效能,其單執行緒只插入或只讀取比innodb型別更快。主要因為myisam使用的表鎖的開銷小於innodb的行鎖開銷,另外myisam實現簡單,在讀取到索引後直接操作磁碟,本身沒有像innodb要維護innodb bufferpool等代價。同時如果資料比較離散而作業系統磁碟cache中沒有資料,myisam會遇到大量隨機io,其速度此時未必會比innodb快。

2.因為myisam只有表鎖,而innodb支援行鎖,使得在混合讀寫情況下(myisam乙個執行緒的寫會阻塞另乙個執行緒的讀或寫),myisam會變的比innodb慢。

功能角度:

1.事務

myisam不像innodb那樣提供事務支援、外來鍵(外來鍵給mysql運維及效能帶來影響,已被禁止使用)等功能。所以如果要使用myisam,你需要確定你的業務不需要且以後也不需要高併發讀寫及事務支援。

2.全文檢索

innodb在mysql5.6之後的版本也有全文檢索功能了

安全與穩定角度:

innodb表損壞概率較低, 由於具備redo日誌使得故障恢復能力較好, myisam表直採用系統檔案儲存,完全依賴作業系統物理檔案,本身不具備物理恢復能力,特別是在例行的大批量灌資料等操作場景下,易發生損壞。

補充:myisam也有其自身的一些優點,除了上面提到的單執行緒讀或寫效率高外,還體現在備份方便(直接拷貝表相關檔案)且支援壓縮備份(使用

mysiampack,資料量為原有資料1/3)。同時,dba目前有完備的技術來解決innodb備份及壓縮問題。

在全表count中,如select count(*) 

from table語句,myisam只要簡單的讀出原就已經儲存好的行數目而innodb 中不儲存表的具體行數,要掃瞄一遍整個表來計算有多少行。這點在innodb表應用中要注意,通常情況下業務採取cache計數等方式來避免統計全表行數。

InnoDB引擎以及合適選擇

innodb引擎 1.innodb表的自動增長列插值時插入null或者0,實際插入的會是自動增長後的值。2.強制設定自動增長列的初始值,語句 alter table auto increment n 3.select last insert id 查詢當前執行緒最後插入記錄使用的值。4.對於inno...

Mysql的InnoDB引擎 4 表(3)

create table t id int engine innodb partition byrange id partition p0 values less than 10 partition p1 values less than 20 partition p2 values less th...

Mysql的InnoDB引擎 4 表(2)

首先我們搞清楚約束和索引的區別,使用者建立了乙個唯一索引,意味著使用者建立了唯一約束。但是約束和索引的概念是不同的,約束更多是邏輯上的概念,用來保證資料的完整性,而索引是乙個資料結構,既有邏輯上的概念,還有物理上的儲存。在innodb儲存引擎表中,域完整性可以通過如下幾個途徑來保證 對於innodb...