數據庫的存儲引擎是數據庫底層軟件組織,數據庫管理系統(DBMS)使用數據引擎進行建立、查詢、更新和刪除數據。不一樣的存儲引擎提供不一樣的存儲機制、索引技巧、鎖定水平等功能,使用不一樣的存儲引擎,還能夠 得到特定的功能。如今許多不一樣的數據庫管理系統都支持多種不一樣的數據引擎。MySql的核心就是插件式存儲引擎,而其中最知名的就是 MyISAM 及 InnoDB。mysql
存儲引擎的查看sql
查看數據庫可配置的存儲引擎數據庫
SHOW ENGINES;
查看數據庫正在使用的存儲引擎vim
show table status from 庫 where name='表1'; #查看錶1正在使用的存儲引擎
use 庫; #進入數據庫 show create table 表1;
存儲引擎的配置緩存
經過命令修改安全
use 庫; #進入數據庫 alter table 表1 engine=MyISAM; #修改存儲引擎爲MyISAM alter table 表2 engine=InnoDB; #修改存儲引擎爲InnoDB
經過配置文件修改(切記,僅對以後新建的表有用!)服務器
vim /etc/my.cnf ... ... [mysqld] default--storage-engine=MyISAM //添加你要設爲默認的存儲引擎
use 庫; #進入庫 create table 表1(id int)engine=InnoDB; #修改存儲引擎爲InnoDB create table 表2(id int)engine=MyISAM; #修改存儲引擎爲MyISAM show create table 表; #查看
MyISAM特色介紹及適用場景
MyISAM基於ISAM存儲引擎,並對其進行擴展。它是在Web、數據倉儲和其餘應用環境下最常使用的存儲引擎之一。MyISAM擁有較高的插入、查詢速度,但不支持事務。MyISAM主要特性有:併發
1)能夠把數據文件和索引文件放在不一樣目錄。
2)表級鎖定形式,數據在更新時鎖定整個表。
3)數據庫讀寫過程當中相互阻塞。
4)能夠經過key_buffer_size來設置緩存索引。
5)數據單獨寫入或讀取 速度快佔用資源少。
6)不支持外鍵約束,只支持全文索引。
7)建表時會生成三個文件,文件名均以表的名字開始。
【 .frm文件存儲表定義 | 數據文件的擴展名:.MYD(MYData) | 索引文件的擴展名:.MYI(MYIndex) 】ide
適用場景: 函數
1)非事務型應用
2)只讀類應用
3)空間類應用
InnoDB特色介紹及適用場景
InnoDB是事務型數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵,其爲MySQL數據庫5.5及之後版本默認存儲引擎。InnoDB主要特性有:
1)InnoDB給MySQL提供了具備提交、回滾和崩潰恢復能力的事物安全(ACID兼容)存儲引擎。InnoDB鎖定在行級而且也在SELECT語句中提供一個相似Oracle的非鎖定讀。這些功能增長了多用戶部署和性能。在SQL查詢中,能夠自由地將InnoDB類型的表和其餘MySQL的表類型混合起來,甚至在同一個查詢中也能夠混合。
2)InnoDB是爲處理巨大數據量的最大性能設計。它的CPU效率多是任何其餘基於磁盤的關係型數據庫引擎鎖不能匹敵的。
3)InnoDB存儲引擎徹底與MySQL服務器整合,InnoDB存儲引擎爲在主內存中緩存數據和索引而維持它本身的緩衝池。InnoDB將它的表和索引在一個邏輯表空間中,表空間能夠包含數個文件(或原始磁盤文件)。這與MyISAM表不一樣,好比在MyISAM表中每一個表被存放在分離的文件中。InnoDB表能夠是任何尺寸,即便在文件尺寸被限制爲2GB的操做系統上。
4)InnoDB支持外鍵完整性約束,存儲表中的數據時,每張表的存儲都按主鍵順序存放,若是沒有顯示在表定義時指定主鍵,InnoDB會爲每一行生成一個6字節的ROWID,並以此做爲主鍵。
5)InnoDB被用在衆多須要高性能的大型數據庫站點上。
6)InnoDB不建立目錄,使用InnoDB時,MySQL將在MySQL數據目錄下建立一個名爲ibdata1的10MB大小的自動擴展數據文件,以及兩個名爲ib_logfile0和ib_logfile1的5MB大小的日誌文件。
適用場景:
MySQL5.7及之後版本已經支持全文索引以及空間函數。
適用於大多數OLTP應用(On-Line Transaction Processing聯機事務處理過程(OLTP)也稱爲面向交易的處理過程,其基本特徵是前臺接收的用戶數據能夠當即傳送到計算中心進行處理,並在很短的時間內給出處理結果,是對用戶操做快速響應的方式之一。
MyISAM 和 InnoDB 是許多人在使用MySQL時最經常使用的兩個存儲引擎,這兩個各有優劣,視具體應用而定。基本的差異爲:MyISAM 不支持事務處理等高級處理,強調的是性能,其執行速度比 InnoDB 更快,可是不提供事務支持,而 InnoDB 提供事務支持、外部鍵等高級數據庫功能。
總而言之,若是數據表主要用來插入和查詢記錄,則 MyISAM 能提供較高的處理效率;若是要提供提交、回滾、崩潰恢復能力的事務安全(ACID兼容)能力,並要求實現併發控制,InnoDB 是一個好的選擇。