Mysql 資料庫引擎

2022-01-30 布裡丹的驢

MySQL支持很多存儲引擎,包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE等,其中InnoDB和BDB支持事務安全。它還支持一些第三方的存儲引擎,例如TokuDB(高寫性能高壓縮存儲引擎)、Infobright(列式存儲引擎)。

Mysql中 MyISAM和 InnoDB的區別有哪些?

區別:

1. InnoDB支持事務,MyISAM不支持事務。這是 MySQL 將默認存儲引擎從 MyISAM變成 InnoDB的重要原因之一;

2. InnoDB支持外鍵,而 MyISAM不支持。對一個包含外鍵的 InnoDB錶轉為 MYISAM會失敗;

3. InnoDB是聚集索引,MyISAM是非聚集索引。聚簇索引的文件存放在主鍵索引的葉子節點上,因此 InnoDB必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然後再通過主鍵查詢到數據。因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。而MyISAM是非聚集索引,數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。

4. InnoDB不保存表的具體行數,執行 selectcount(*) from table 時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快;

5. InnoDB最小的鎖粒度是行鎖,MyISAM最小的鎖粒度是表鎖。一個更新語句會鎖住整張表,導致其他查詢和更新都會被阻塞,因此並發訪問受限。這也是MySQL將默認存儲引擎從MyISAM變成 InnoDB的重要原因之一;

如何選擇:

1. 是否要支持事務,如果要請選擇 InnoDB,如果不需要可以考慮MyISAM;

2. 如果表中絕大多數都只是讀查詢,可以考慮 MyISAM,如果既有讀寫也挺頻繁,請使用InnoDB。

3. 系統奔潰後,MyISAM恢復起來更困難,能否接受,不能接受就選 InnoDB;

4. MySQL5.5版本開始Innodb已經成為Mysql的默認引擎(之前是MyISAM),說明其優勢是有目共睹的。如果你不知道用什麼存儲引擎,那就用InnoDB,至少不會差。

Innodb引擎概述

Innodb引擎提供了對資料庫ACID事務的支持,並且實現了SQL標準的四種隔離級別。該引擎還提供了行級鎖和外鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於MySQL後臺的完整資料庫系統,MySQL運行時Innodb會在內存中建立緩衝池,用於緩衝數據和索引。但是該引擎不支持FULLTEXT類型的索引,而且它沒有保存表的行數,當SELECTCOUNT(*) FROM TABLE時需要掃描全表。當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在並發較高時,使用Innodb引擎會提升效率。但是使用行級鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表。

MyISAM引擎概述

MyISAM是MySQL默認的引擎,但是它沒有提供對資料庫事務的支持,也不支持行級鎖和外鍵,因此當INSERT(插入)或UPDATE(更新)數據時即寫操作需要鎖定整個表,效率便會低一些。不過和Innodb不同,MyISAM中存儲了表的行數,於是SELECTCOUNT(*) FROM TABLE時只需要直接讀取已經保存好的值而不需要進行全表掃描。如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支持,那麼MyISAM也是很好的選擇。

簡單介紹區別

1、MyISAM是非事務安全的,而InnoDB是事務安全的

2、MyISAM鎖的粒度是表級的,而InnoDB支持行級鎖

3、MyISAM支持全文類型索引,而InnoDB不支持全文索引

4、MyISAM相對簡單,效率上要優於InnoDB,小型應用可以考慮使用MyISAM

5、MyISAM表保存成文件形式,跨平臺使用更加方便

應用場景

1、MyISAM管理非事務表,提供高速存儲和檢索以及全文搜索能力,如果再應用中執行大量select操作應該選擇MyISAM

2、InnoDB用於事務處理,具有ACID事務支持等特性,如果在應用中執行大量insert和update操作,應該選擇InnoDB

mysql中指定引擎的方法:

1、創建表時,可以通過ENGINE來指定存儲引擎,在create語句最後加上「engine=存儲引擎;」即可;

2、修改表時,可以使用「alter table 表名 engine=存儲引擎;」來指定存儲引擎。

查看當前表使用的存儲引擎mysql> show create table emp;或者mysql> show table status like 'emp' \G;

查看當前資料庫支持的存儲引擎mysql> show engines \G;

相關焦點

  • MySQL資料庫及應用
    MyISAM存儲引擎提供了高速的存儲與檢索和全文探索能力,它並不支持事務處理應用程式D.除了InnoDB、MOMORY和MyISAM存儲引擎外,MRG_MYISAM、BLACKHOLE和CSV也是MySQL資料庫的存儲引擎答案: A2 單選 查看資料庫系統中已經存在的資料庫時,可以執行_____________命令。A.
  • MySQL分支資料庫MariaDB之CentOS安裝教程
    MariaDB資料庫管理系統是MySQL的一個分支,由MySQL的創始人Michael Widenius主持開發。採用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,在存儲引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。
  • MySQL-mysqldump備份資料庫
    mysqldump備份1、備份命令格式:mysqldump -h主機名 -P埠 -u用戶名 -p密碼 --database 資料庫名 > 文件名.sql 例如: mysqldump -h 192.168.1.100 -p 3306 -uroot -ppassword --database
  • mysql學習詳記一&&什麼是mysql資料庫?
    一、什麼是mysql資料庫1、資料庫的概念資料庫: 存儲數據的倉庫資料庫類型:層次式資料庫, 網絡式資料庫, 關係型資料庫2、關係型資料庫使用關係模型來存儲的數據的資料庫叫做關係型資料庫。3、常見資料庫商業資料庫:Oracle、SQLServer、DB2、Sybase開源資料庫:MySQL、SQLLite、orientdb4、MySQL資料庫的安裝和配置參考上一篇文章 mysql-mysql
  • Loadrunner測試mysql資料庫
    loadrunner可以利用mysql lib庫,通過引用外部DLL,模擬mysql客戶端連接資料庫進行增刪改查的操作進行測試。下面主要介紹如何利用mysql lib庫連接mysql資料庫進行性能測試。一、準備工作1.
  • MySQL資料庫測試題
    MySQL資料庫入門1、假設要按照分頁(每頁顯示10條)的形式獲取test表中的數據,在MySql>資料庫中,以下哪條語句是取第2頁中的數據?test(資料庫名已經存在)中的表結構和數據?(難度A)A、在DOS提示符下輸入以下命令mysql -uroot -p1234 test<d:/db.sql B、在DOS提示符下輸入以下命令mysqldump -uroot -p1234 test<d:/db.sql
  • 亞馬遜發布兼容 MySQL 的資料庫引擎 Aurora
    新浪科技訊 北京時間11月13日凌晨消息,在今日美國拉斯維加斯召開的雲計算大會AWS re:Invent大會上,亞馬遜發布了新的資料庫引擎Amazon Aurora這是一個面向亞馬遜關係資料庫的、兼容MySQL的資料庫引擎,結合了高端商用資料庫的高速度和高可用性以及開源資料庫的簡潔和低成本。據亞馬遜介紹,Amazon Aurora的性能可以達到典型MySQL資料庫的五倍,可用性不低於商用資料庫或高端SAN,並擁有可擴展性和安全性,但成本只有高端商用資料庫產品的 十分之一。
  • mysql查詢資料庫導致中文亂碼
    mysql查詢資料庫,如果資料庫裡的欄位的值是中文,就會出現亂碼,怎麼解決呢?看下面的講解寫一個test.php的文檔,代碼如下所示,打開mysql的界面,新建一個xml的資料庫,再建一個student的數據表,欄位值和記錄如下圖所示,打開谷歌瀏覽器,運行test.php文檔。運行結果是下圖:看到了吧,出現亂碼了,怎麼辦呢?
  • 資料庫基礎:mysql主從集群搭建
    還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的數據同時寫到備份的資料庫中。實現mysql資料庫的熱備份。 要想實現雙機的熱備,首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是作為從資料庫的數據版本可以高於主伺服器資料庫的版本,但是不可以低於主伺服器的資料庫版本。
  • mysql資料庫審計-安華金和
    mysql資料庫審計是能夠實時記錄網絡上的資料庫活動,對資料庫操作進行細粒度審計的合規性管理,對資料庫遭受到的風險行為進行告警,對攻擊行為進行阻斷。它通過對用戶訪問資料庫行為的記錄、分析和匯報,用來幫助用戶事後生成合規報告、事故追根溯源,同時加強內外部資料庫網絡行為記錄,提高數據資產安全。
  • Mysql資料庫的使用方法
    一、資料庫的基本概念1、 常用的兩種引擎: (1) InnoDB引擎:        1)支持ACID,簡單地說就是支持事務完整性、一致性;        2)支持行鎖,以及類似ORACLE的一致性讀,多用戶並發;        3)獨有的聚集索引主鍵設計方式,可大幅提升並發讀寫性能;
  • Node.js系列十二 - 資料庫MySQL
    認識資料庫 1.1./bin# 再次執行mysql版本mysql --version1.4.1.終端操作資料庫我們說過,一個資料庫軟體中,可以包含很多個資料庫:infomation_schema:信息資料庫,其中包括MySQL在維護的其他資料庫、表、列、訪問權限等信息;performance_schema:性能資料庫,記錄著MySQL Server資料庫引擎在運行過程中的一些資源消耗相關的信息;mysql:用於存儲資料庫管理者的用戶信息
  • MySQL資料庫主從複製搭建
    本文介紹MySQL資料庫主從複製搭建。文末有主從複製步驟導圖資料庫批量初始化更多詳細操作,請參考之前的多實例的文章內容為保證數據的純淨,將資料庫中所有數據刪除,並重新初始化rm -rf /data/* mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/application/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/
  • MySQL不同存儲引擎的數據備份與恢復
    在之前的幾篇文章中,我們以MySQL為例對數據備份進行了粗略的解讀,本文我們依然以MySQL為例,講講面對不同的存儲引擎如何做數據備份與恢復。  為了應對不同的數據處理,MySQL提供了十幾種不同的存儲引擎,不過,我們沒有必要一一去了解,因為熟悉使用MySQL的人都知道,比較常用的存儲引擎有兩個,分別是MyISAM和InnoDB。
  • 【MySQL】如何最大程度防止人為誤操作MySQL資料庫?
    他原本的想法是登錄資料庫update一個記錄,結果忘了加where條件,於是悲劇發生了。今天,我們不講如何恢復誤操作的數據(後面專門講如何恢復誤刪除的數據),我們講講如何從源頭上避免這樣的問題,這才是避免類似問題的根本措施。
  • mysql外鍵怎麼用?Mysql資料庫外鍵的使用介紹
    在之前的文章中,已經給大家介紹了mysql外鍵的基礎定義以及外鍵創建的方法,需要的朋友可以先閱讀上篇文章。想必大家應該對mysql外鍵都有一定的了解了。下面我們就舉個簡單例子給大家介紹Navicat(資料庫管理工具)中關於mysql外鍵的基本使用操作。Navicat是一套快速、可靠並價格相當便宜的資料庫管理工具,專為簡化資料庫的管理及降低系統管理成本而設。
  • ubuntu mysql 服務管理以及資料庫操作
    MySQL是一種關係型資料庫管理系統(數據保存在不同的表中而不是將所有數據放在同一個大倉庫內,訪問速度以及靈活性有明顯提高 ),支持標準的sql語言,並且mysql是開源的,不需要支付額外的費用,所以當下非常流行 本文介紹 ubuntu下 mysql 服務的安裝與管理以及mysql資料庫的簡單使用
  • MySQL資料庫基礎教程
    除了具有許多其它資料庫所不具備的功能和選擇之外,MySQL資料庫是一種完全免費的產品,用戶可以直接從網上下載資料庫,用於個人或商業用途,而不必支付任何費用(推薦下載站點https://www.mysql.com)。
  • 聊一聊MySQL的存儲引擎
    存儲引擎(storage engine)是MySQL的專用稱呼,資料庫行業老大哥Oracle,以及SQL Server,PostgreSQL等都沒有存儲引擎的說法
  • MySQL資料庫高可用集群搭建-PXC集群部署
    :Abc_123456 #同步嚴厲模式pxc_strict_mode=ENFORCING #基於ROW複製(安全可靠)binlog_format=ROW #默認引擎default_storage_engine=InnoDB #主鍵自增長不鎖表innodb_autoinc_lock_mode=2 6.啟動第一個節點/etc/init.d/mysql bootstrap-pxc