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