Mysql数据库五大常用数据引擎
目錄:
- 數據庫
- 什么是數據庫?
- RDBMS 術語
- MySQL數據庫的介紹
- MySQL數據庫的特點:
- 五大常用數據庫引擎
- Innodb與MyIASM引擎的區別與應用場景
- 為什么MyIASM會比Innodb 的查詢速度快
- 應用場景
數據庫
關系型數據庫:
最典型的數據結構是表,由二維表及其之間的聯系所組成的一個數據組織
優點:
- 易于維護:都是使用表結構,格式一致
- 使用方便:SQL語言通用,可用于復雜查詢
- 復雜操作:支持SQL,可用于一個表以及多個表之間非常復雜的查詢
缺點:
- 讀寫性能比較差,尤其是海量數據的高效率讀寫
- 固定的表結構,靈活度稍欠
- 高并發讀寫需求,傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸
非關系型數據庫:
嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合,可以是文檔或者鍵值對等。
優點:
- 格式靈活:存儲數據的格式可以是key,value形式、文檔形式、圖片形式等等,使用靈活,應用場景廣泛,而關系型數據庫則只支持基礎類型
- 速度快:nosql可以使用硬盤或者隨機存儲器作為載體,而關系型數據庫只能使用硬盤
- 高擴展性
- 成本低:nosql數據庫部署簡單,基本都是開源軟件
缺點:
- 不提供sql支持,學習和使用成本較高
- 無事務處理
- 數據結構相對復雜,復雜查詢方面稍欠
什么是數據庫?
RDBMS 術語
在我們開始學習MySQL 數據庫前,讓我們先了解下RDBMS的一些術語:
- 數據庫: 數據庫是一些關聯表的集合。.
- 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
- 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
- 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
- 冗余:存儲兩倍數據,冗余可以使系統速度更快。
- 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
- 外鍵:外鍵用于關聯兩個表。
- 復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引。
- 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似于書籍的目錄。
- 參照完整性: 參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。
MySQL數據庫的介紹
- MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
- 關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
- MySQL所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
MySQL數據庫的特點:
-
Mysql是開源的,所以不需要支付額外的費用
-
Mysql支持大型的數據庫。可以處理擁有上千萬條記錄的大型數據庫
-
MySQL使用標準的SQL數據語言形式
-
MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件為8TB
-
Mysql是可以定制的,采用了GPL協議,可以修改源碼來開發自己的Mysql系統
五大常用數據庫引擎
一:MyISAM:
創建一個myisam存儲引擎的表的時候會出現三個文件
1.tb_demo.frm,存儲表定義; 2.tb_demo.MYD,存儲數據; 3.tb_demo.MYI,存儲索引。
因為MyISAM表有無法處理事務,所以它只適合在以下情況下使用
二:InnoDB:
Innodb與MyIASM引擎的區別與應用場景
1. Innodb與MyIASM引擎的區別
(1)事務處理:
MyIASM是非事務安全型的,而InnoDB是事務安全型的(支持事務處理等高級處理);
(2)鎖機制不同:
MyIASM是表級鎖,而InnoDB是行級鎖;
(3)select ,update ,insert ,delete 操作:
- MyIASM:如果執行大量的SELECT,MyISAM是更好的選擇。
- InnoDB:如果你的數據執行大量的INSERT或UPDATE,出于性能方面的考慮,應該使用InnoDB表。
- MySQL表級鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨占寫鎖(Table Write Lock)。
- InnoDB行鎖是通過給索引項加鎖來實現的,即只有通過索引條件檢索數據,InnoDB才使用行級鎖,否則將使用表鎖!
(4)查詢表的行數不同:
MyIASM:select count() from table, MyISAM只要簡單的讀出保存好的行數,注意的是,當count()語句包含 where條件時,兩種表的操作是一樣的。
InnoDB : InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行。
MyISAM存儲表的總行數;InnoDB不存儲總行數;
MyISAM采用非聚集索引,B+樹葉子存儲指向數據文件的指針。InnoDB主鍵索引采用聚集索引,B+樹葉子存儲數據
(5)外鍵支持:
mysiam表不支持外鍵,而InnoDB支持。
為什么MyIASM會比Innodb 的查詢速度快
INNODB在做SELECT的時候,要維護的東西比MyIASM引擎多很多;
MVCC ( Multi-Version Concurrency Control )多版本并發控制 。
應用場景
MyIASM適合:
InnoDB適合:
三:Memory:
使用MEMORY引擎主要是因為速度,好處就在MEMORY采用的邏輯存儲是系統內存,極大的提高了儲存數據表的性能; 壞處就是當mysql守護進程崩潰時,所有的Memory數據都會丟失。
一般在以下幾種情況下使用Memory存儲引擎:
四:MERGE /m??d?/ :
MERGE存儲引擎是一組MyISAM表的組合,這些MyISAM表結構必須完全相同,所以就相當于一個集合器。比起其他儲存引擎MERGE不是很優秀,但是在某些情況下MERGE還是非常的有用。
Merge存儲引擎的使用場景:
- 對于服務器日志這種信息,一般常用的存儲策略是將數據分成很多表,每個名稱與特定的時間端相關。
例如:可以用12個相同的表來存儲服務器日志數據,每個表用對應各個月份的名字來命名。當有必要基于所有12個日志表的數據來生成報表,這意味著需要編寫并更新多表查詢,以反映這些表中的信息。與其編寫這些可能出現錯誤的查詢,不如將這些表合并起來使用一條查詢,之后再刪除Merge表,而不影響原來的數據,刪除Merge表只是刪除Merge表的定義,對內部的表沒有任何影響。
五:ARCHIVE /'ɑ:kaiv/ :
Archive是歸檔的意思,在歸檔之后很多的高級功能就不再支持了,僅僅支持最基本的插入和查詢兩種功能
在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本就開始支持索引了。Archive擁有很好的壓縮機制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮,所以它經常被用來當做倉庫使用。
總結
以上是生活随笔為你收集整理的Mysql数据库五大常用数据引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebsocketWebSSH
- 下一篇: Mysql的事务事务的特征事务的隔离级别