mysql的數據庫引擎


Mysql的邏輯分層

連接層-->服務層--->引擎層--->存儲層

什么是數據庫引擎

數據庫引擎是用於存儲、處理和保護數據的核心服務。
當你訪問數據庫時,不管是手工訪問,還是程序訪問,都不是直接讀寫數據庫文件,而是通過數據庫引擎去訪問數據庫文件
注意:數據引擎是指表格中的引擎,

數據庫引擎innodb與myisam區別

是否支持事務

  • InnoDB支持事務
    對於InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin transaction和commit之間,組成一個事務;
  • MyISAM不支持,

支持鎖的級別不同

  • InnoDB支持行鎖
    注意:數據庫的主鍵和索引對鎖是有影響的。
    在使用for update的時候,在明確使用主鍵或者索引的時候才會是行鎖,否則就是表鎖。
  • MyISAM只支持表鎖

是否支持外鍵

  • InnoDB支持外鍵
  • MyISAM不支持。
    對一個包含外鍵的InnoDB表轉為MYISAM會失敗;

存放索引的方式

  • InnoDB是聚集索引,
    數據文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數據。
    因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。
  • MyISAM是非聚集索引,數據文件是分離的,
    索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。

查詢具體行數的差異

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

是否支持全文索引

  • Innodb不支持全文索引
  • MyISAM支持全文索引,查詢效率上MyISAM要高於Innodb;

如何選擇存儲引擎

  • 是否要支持事務,如果要請選擇innodb,如果不需要可以考慮MyISAM
  • 如果表中絕大多數都只是讀查詢,可以考慮MyISAM,如果既有讀寫也挺頻繁,請使用InnoDB。
  • 系統崩潰后,MyISAM恢復起來更困難,能否接受;
  • MySQL5.5版本開始Innodb已經成為Mysql的默認引擎(之前是MyISAM),說明其優勢是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會差。

存儲引擎管理

  • 查看數據庫支持的存儲引擎
    show engines
  • 查看數據庫當前使用的存儲引擎,就是默認引擎是什么。
    show variables like '%storage_engine%'
    也可以在MySQL配置文件中查看。
    windows - my.ini。
    Linux - my.cnf
  • 查看數據庫表所用的存儲引擎
    show create table table_name
  • 創建表指定存儲引擎
    create table table_name (column_name column_type) engine = engine_name
  • 修改表的存儲引擎
    alter table table_name engine=engine_name
  • 修改默認的存儲引擎
    在MySQL配置文件中修改下述內容:
    default-storage-engine=INNODB
    MySQL配置文件:
    windows系統 - MySQL安裝目錄/my.ini (5.7版本my.ini文件在數據目錄中。 C:/programdata/MySQL Server 5.7/mysql/)
    linux系統 - /etc/my.cnf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM