mysql 的引擎

來源:互聯網
上載者:User

標籤:delete   load   指定   多列   空間   tab   建立   使用   insert   

mysql我們常用到的引擎有 MyISAM 和 InnoDB  這兩種,這裡我們暫時只做這兩種的簡介。

  MyISAM InnoDB
結構區別 每個MyISAM在磁碟上儲存成三個檔案。第一個 檔案的名字以表的名字開始,副檔名指出檔案類型。
.frm檔案儲存體表定義。
資料檔案的擴 展名為.MYD (MYData)。
索引檔案的擴 展名是.MYI (MYIndex)。
基於磁碟的資源是InnoDB資料表空間資料檔案和它的記錄檔,InnoDB 表的 大小隻受限於作業系統檔案的大小,一般為 2GB
事物處理 MyISAM類型的表強調的是效能,其執行數 度比InnoDB類型更快,但是不提供事務支援 InnoDB提供事務支援事務,外部鍵等進階 資料庫功能
SELECT UPDATEINSERTDelete 如果執行大量的SELECT,MyISAM是更好的選擇 1.如果你的資料執行大量的INSERTUPDATE,出於效能方面的考慮,應該使用InnoDB表
2.DELETE FROM table時,InnoDB不會重建立立表,而是一行一行的 刪除。
3.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方案是首先把InnoDB表改成MyISAM表,匯入資料後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用
AUTO_INCREMENT的 操作 每表一個AUTO_INCREMEN列的內部處理。
MyISAMINSERTUPDATE操 作自動更新這一列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂的值被刪除之後就不 能再利用。(當AUTO_INCREMENT列被定義為多列索引的最後一列, 可以出現重使用從序列頂部刪除的值的情況)。
AUTO_INCREMENT值可用ALTER TABLE或myisamch來重設

對於AUTO_INCREMENT類型的欄位,InnoDB中必須包含只有該欄位的索引,但 是在MyISAM表中,可以和其他欄位一起建立聯 合索引

更好和更快的auto_increment處理

如果你為一個表指定AUTO_INCREMENT列,在資料詞典裡的InnoDB表控制代碼包含一個名為自動成長計數 器的計數器,它被用在為該列賦新值。

 

自動成長計數 器僅被儲存在主記憶體中,而不是存在磁碟上

關於該計算機 的演算法實現,請參考

AUTO_INCREMENT列 在InnoDB裡 如何工作

具體行數 select count(*) from table,MyISAM只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的 InnoDB 中不 儲存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行
表鎖 提供行鎖(locking on row level),提供與 Oracle 類型一致的不加鎖讀取(non-locking read in
SELECTs),另外,InnoDB表的行鎖也不是絕對的,如果在執 行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “%aaa%”

兩種儲存引擎的大致區別表現在:
1)InnoDB支援事務,MyISAM不支援,這一點是非常之重要。事務是一種進階的處理方式,如在一些列增刪改中只要哪個出錯還可以復原還原,而MyISAM就不可以了。
2)MyISAM適合查詢以及插入為主的應用,InnoDB適合頻繁修改以及涉及到安全性較高的應用
3)InnoDB支援外鍵,MyISAM不支援
4)從MySQL5.5.5以後,InnoDB是預設引擎
5)InnoDB不支援FULLTEXT類型的索引
6)InnoDB中不儲存表的行數,如select count(*) from table時,InnoDB需要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出儲存好的行數即可。注意的是,當count(*)語句包含where條件時MyISAM也需要掃描整個表
7)對於自增長的欄位,InnoDB中必須包含只有該欄位的索引,但是在MyISAM表中可以和其他欄位一起建立聯合索引
8)清空整個表時,InnoDB是一行一行的刪除,效率非常慢。MyISAM則會重建表
9)InnoDB支援行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like ‘%lee%‘

關於MyISAM與InnoDB選擇使用:
MYISAM和INNODB是Mysql資料庫提供的兩種儲存引擎。兩者的優劣可謂是各有千秋。INNODB會支援一些關聯式資料庫的進階功能,如事務功能和行級鎖,MYISAM不支援。MYISAM的效能更優,佔用的儲存空間少。所以,選擇何種儲存引擎,視具體應用而定:
1)如果你的應用程式一定要使用事務,毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級鎖是有條件的。在where條件沒有使用主鍵時,照樣會鎖全表。比如DELETE FROM mytable這樣的刪除語句。
2)如果你的應用程式對查詢效能要求較高,就要使用MYISAM了。MYISAM索引和資料是分開的,而且其索引是壓縮的,可以更好地利用記憶體。所以它的查詢效能明顯優於INNODB。壓縮後的索引也能節約一些磁碟空間。MYISAM擁有全文索引的功能,這可以極大地最佳化LIKE查詢的效率。

 

測試:

mysql 預存程序插入兩百萬資料,myisam 1分41秒寫完,InnoDB 寫入1小時32分3秒完成

select  myisam條件選擇0.5秒左右,InnoDB 條件選擇2.4秒

 

mysql 的引擎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.