Mysql的數據庫引擎
Mysql的邏輯分層
鏈接層-->服務層--->引擎層--->存儲層mysql
什麼是數據庫引擎
數據庫引擎是用於存儲、處理和保護數據的核心服務。linux
當你訪問數據庫時,無論是手工訪問,仍是程序訪問,都不是直接讀寫數據庫文件,而是經過數據庫引擎去訪問數據庫文件sql
注意:數據引擎是指表格中的引擎,數據庫
數據庫引擎innodb與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