日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 存储引擎

發布時間:2024/4/17 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 存储引擎 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL數據庫的體系架構如下圖所示:

從上圖中可以看出,MySQL主要分為以下幾個組件:

  • 連接池組件
  • 管理服務和工具組件
  • SQL接口組件
  • 分析器組件
  • 優化器組件
  • 緩沖組件
  • 插件式存儲引擎
  • 物理文件?

一、存儲引擎

  存儲引擎?: 其實就是指定??如何存儲數據,如何為存儲的數據?建立索引?以及?如何更新查詢數據等技術實現的方法。因為在關系數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)

了解:?在Oracle 和SQL Server等數據庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的。而MySql數據庫提供了多種存儲引擎。用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎

下表顯示了各種存儲引擎的特性:

MySQL存儲引擎比較特性MyISAMInnoDBMemoryArchiveNDB
存儲限制?沒有? 64TB? 有?沒有?沒有
事務?? 支持???支持
鎖粒度?表? 行? 表?行? 頁
B樹索引?支持??支持??支持???支持
哈希索引???支持??支持??
全文索引?支持????
集群索引???支持???
數據緩存???支持? ?支持??
索引緩存?支持??支持? ?支持??
數據壓縮?支持???支持?
批量插入?高?相對低??高?非常高??高
內存消耗?低?高? 中?低? 低
外鍵支持??支持???
復制支持?支持?支持??支持?支持?支持
查詢緩存?支持?支持??支持?支持?支持
備份恢復?支持?支持??支持?支持?支持
集群支持?????支持

其中最常見的兩種存儲引擎是MyISAM 和 InnoDB

?MyISAM存儲引擎

1、MyISAM 是MySQL (mysql 5.5版本以前) 原來的默認存儲引擎.

2、MyISAM?? 這種存儲引擎不支持事務,不支持行級鎖,只支持并發插入的表鎖。

3、MyISAM???類型的表支持三種不同的存儲結構:靜態型、動態型、壓縮型。

  (1)靜態型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的數據類型),這樣mysql就會自動使用靜態myisam格式。

???????   使用靜態格式的表的性能比較高,因為在維護和訪問的時候以預定格式存儲數據時需要的開銷很低。但是這高性能是用空間換來的,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,占據了整個空間。

  (2)動態型:如果列(即使只有一列)定義為動態的(xblob, xtext, varchar等數據類型),這時myisam就自動使用動態型,雖然動態型的表占用了比靜態型表較少的空間,但帶來了性能的降低.

  (3)壓縮型:如果在這個數據庫中創建的是在整個生命周期內只讀的表,則這種情況就是用myisam的壓縮型表來減少空間的占用。

    壓縮方式參考官方文檔: https://dev.mysql.com/doc/refman/5.6/en/myisampack.html

4、MyISAM也是使用B+tree索引但是和Innodb的在具體實現上有些不同。

InnoDB存儲引擎

(1)MySQL默認存儲引擎(MySQL 5.5 版本后).

(2)innodb 支持事務,回滾以及系統崩潰修復能力和多版本迸發控制的事務的安全。

(3)innodb 支持自增長列(auto_increment),自增長列的值不能為空,(一個表只允許存在一個自增,并且要求自增列必須為索引)

(4)innodb 支持外鍵(foreign key) ,外鍵所在的表稱為子表,而所依賴的表稱為父表。

(5)innodb存儲引擎支持行級鎖。

(6)innodb存儲引擎索引使用的是B+Tree

補充3點:

? ? 1.大容量的數據集時趨向于選擇Innodb。因為它支持事務處理和故障的恢復。Innodb可以利用數據日志來進行數據的恢復。主鍵的查詢在Innodb也是比較快的。

? ? 2.大批量的插入語句時(這里是INSERT語句)在MyIASM引擎中執行的比較的快,但是UPDATE語句在Innodb下執行的會比較的快,尤其是在并發量大的時候。

? ? 3.兩種引擎所使用的索引數據結構是什么?

? ? ? ? 答案:都是B+樹!

    MyIASM引擎,B+樹的數據結構中存儲的內容實際上是實際數據的地址值。也就是說它的索引和實際數據是分開的,只不過使用索引指向了實際數據。這種索引的模式被稱為非聚集索引。

    Innodb引擎的索引的數據結構也是B+樹,只不過數據結構中存儲的都是實際的數據,這種索引有被稱為聚集索引。

?Memory? 存儲引擎

Memory存儲引擎(之前稱為Heap)將表中數據存放在內存中,如果數據庫重啟或崩潰,數據丟失,因此它非常適合存儲臨時數據。

Archive存儲引擎

正如其名稱所示,Archive非常適合存儲歸檔數據,如日志信息。它只支持INSERT和SELECT操作,其設計的主要目的是提供高速的插入和壓縮功能。

?NDB存儲引擎

NDB存儲引擎是一個集群存儲引擎,類似于Oracle的RAC,但它是Share Nothing(非共享)的架構,因此能提供更高級別的高可用性和可擴展性。NDB的特點是數據全部放在內存中,因此通過主鍵查找非常快。

關于NDB,有一個問題需要注意,它的連接(join)操作是在MySQL數據庫層完成,不是在存儲引擎層完成,這意味著,復雜的join操作需要巨大的網絡開銷,查詢速度會很慢。

?

二、測試存儲引擎

?創建三個表,分別使用innodb,myisam,memory 存儲引擎,進行插入數據測試

1 2 3 4 5 6 7 8 9 10 create?table?t1(id?int)engine=innodb; create?table?t2(id?int)engine=myisam; create?table?t3(id?int)engine=memory; #看一下三個存儲引擎創建的 表文件 ?t1.frm? t1.ibd? ?t2.MYD? t2.MYI? t2.frm? ?t3.frm #細心的同學會發現最后的存儲引擎只有表結構,無數據 #memory,在重啟mysql或者重啟機器后,表內數據清空

重點[面試題]:

innodb與MyIASM存儲引擎的區別:
  1.innodb 是mysql5.5版本以后的默認存儲引擎, 而MyISAM是5.5版本以前的默認存儲引擎.
  2.innodb 支持事物,而MyISAM不支持事物
  3.innodb 支持行級鎖.而MyIASM 它支持的是并發的表級鎖.
  4.innodb 支持外鍵, 而MyIASM 不支持外鍵
  5.innodb與MyIASM存儲引擎都采用B+TREE存儲數據, 但是innodb的索引與數據存儲在一個文件中,這種方式我們稱之為聚合索引.?
    而MyIASM則會單獨創建一個索引文件,也就是說,數據與索引是分離開的
  6.在效率方面MyISAM比innodb高,但是在性能方面innodb要好一點.

轉載于:https://www.cnblogs.com/qinghuani/p/8619844.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的MySQL 存储引擎的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。