mysql 資料庫儲存引擎

2022-05-04 13:33:06 字數 3557 閱讀 3439

mysql中建立的庫===>資料夾

庫中建立的表===>檔案

資料庫中的表也應該有不同的型別,表的型別不同,會對應mysql不同的訪問機制,表型別又稱為儲存引擎。

儲存引擎說白了就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料等技術的實現方

法。因為在關聯式資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以稱為表型別(即儲存和

操作此表的型別)

在oracle 和sql server等資料庫中只有一種儲存引擎,所有資料儲存管理機制都是一樣的。而mysql

資料庫提供了多種儲存引擎。使用者可以根據不同的需求為資料表選擇不同的儲存引擎,使用者也可以根據

自己的需要編寫自己的儲存引擎

sql 解析器、sql 優化器、緩衝池、儲存引擎等元件在每個資料庫中都存在,但不是每 個資料庫都有這麼多儲存引擎。mysql

的外掛程式式儲存引擎可以讓儲存引擎層的開發人員設 計他們希望的儲存層,例如,有的應用需要滿足事務的要求,有的應用則不需要對事務有這 麼強的要求

;有的希望資料能持久儲存,有的只希望放在記憶體中,臨時並快速地提供對資料 的查詢。 

mariadb [(none)]> show engines\g  #檢視所有支援的儲存引擎

mariadb [(none)]> show variables like 'storage_engine%'; #檢視正在使用的儲存引擎

mysql儲存引擎介紹

#innodb 儲存引擎

支援事務,其設計目標主要面向聯機事務處理(oltp)的應用。其

特點是行鎖設計、支援外來鍵,並支援類似 oracle 的非鎖定讀,即預設讀取操作不會產生鎖。 從 mysql 5.5.8版本開始是預設的儲存引擎。

innodb 儲存引擎將資料放在乙個邏輯的表空間中,這個表空間就像黑盒一樣由 innodb 儲存引擎自身來管理。從 mysql 4.1(包括 4.1)版本開始,可以將每個 innodb 儲存引擎的 表單獨存放到乙個獨立的 ibd 檔案中。此外,innodb 儲存引擎支援將裸裝置(row disk)用 於建立其表空間。

innodb 通過使用多版本併發控制(mvcc)來獲得高併發性,並且實現了 sql 標準 的 4 種隔離級別,預設為 repeatable 級別,同時使用一種稱為 netx-key locking 的策略來 避免幻讀(phantom)現象的產生。除此之外,innodb 儲存引擎還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應雜湊索引(adaptive hash index)、預讀(read ahead) 等高效能和高可用的功能。

對於表中資料的儲存,innodb 儲存引擎採用了聚集(clustered)的方式,每張表都是按 主鍵的順序進行儲存的,如果沒有顯式地在表定義時指定主鍵,innodb 儲存引擎會為每一 行生成乙個 6位元組的 rowid,並以此作為主鍵。

innodb 儲存引擎是 mysql 資料庫最為常用的一種引擎,facebook、google、yahoo 等 公司的成功應用已經證明了 innodb 儲存引擎具備高可用性、高效能以及高可擴充套件性。對其 底層實現的掌握和理解也需要時間和技術的積累。如果想深入了解 innodb 儲存引擎的工作 原理、實現和應用,可以參考《mysql 技術內幕:innodb 儲存引擎》一書。

#myisam 儲存引擎

不支援事務、表鎖設計、支援全文索引,主要面向一些 olap 數 據庫應用,在 mysql 5.5.8版本之前是預設的儲存引擎(除 windows 版本外)。資料庫系統 與檔案系統乙個很大的不同在於對事務的支援,myisam 儲存引擎是不支援事務的。究其根 本,這也並不難理解。使用者在所有的應用中是否都需要事務呢?在資料倉儲中,如果沒有 etl 這些操作,只是簡單地通過報表查詢還需要事務的支援嗎?此外,myisam 儲存引擎的 另乙個與眾不同的地方是,它的緩衝池只快取(cache)索引檔案,而不快取資料檔案,這與 大多數的資料庫都不相同。

#ndb 儲存引擎

#memory 儲存引擎

正如其名,memory 儲存引擎中的資料都存放在記憶體中,資料庫重 啟或發生崩潰,表中的資料都將消失。它非常適合於儲存 oltp 資料庫應用中臨時資料的臨時表,也可以作為 olap 資料庫應用中資料倉儲的維度表。memory 儲存引擎預設使用雜湊 索引,而不是通常熟悉的 b+樹索引。

#infobright 儲存引擎

第三方的儲存引擎。其特點是儲存是按照列而非行的,因此非常 適合 olap 的資料庫應用。其官方**是 上面有不少成功的資料 倉庫案例可供分析。

#ntse 儲存引擎

網易公司開發的面向其內部使用的儲存引擎。目前的版本不支援事務, 但提供壓縮、行級快取等特性,不久的將來會實現面向記憶體的事務支援。

#blackhole

黑洞儲存引擎,可以應用於主備複製中的分發主庫。

方法1:建表時指定

mariadb [db1]> create table innodb_t1(id int,name char)engine=innodb;

mariadb [db1]> create table innodb_t2(id int)engine=innodb;

mariadb [db1]> show create table innodb_t1;

mariadb [db1]> show create table innodb_t2;

方法2:在配置檔案中指定預設的儲存引擎

/etc/my.cnf

[mysqld]

default-storage-engine=innodb

innodb_file_per_table=1

檢視

[root@egon db1]# cd /var/lib/mysql/db1/

[root@egon db1]# ls

db.opt innodb_t1.frm innodb_t1.ibd innodb_t2.frm innodb_t2.ibd

練習建立四個表,分別使用innodb,myisam,memory,blackhole儲存引擎,進行插入資料測試

mariadb [db1]> create table t1(id int)engine=innodb;

mariadb [db1]> create table t2(id int)engine=myisam;

mariadb [db1]> create table t3(id int)engine=memory;

mariadb [db1]> create table t4(id int)engine=blackhole;

mariadb [db1]> quit

[root@egon db1]# ls /var/lib/mysql/db1/ #發現後兩種儲存引擎只有表結構,無資料

db.opt t1.frm t1.ibd t2.myd t2.myi t2.frm t3.frm t4.frm

#memory,在重啟mysql或者重啟機器後,表內資料清空

#blackhole,往表內插入任何資料,都相當於丟入黑洞,表內永遠不存記錄

Mysql資料庫儲存引擎

儲存引擎是什麼?mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。例如,如果你在研究大量的臨時資料,你也許需要使...

資料庫 mysql儲存引擎

mysql常用的四種引擎的介紹 1 myisam儲存引擎 不支援事務 也不支援外來鍵,優勢是訪問速度快,對事務完整性沒有要求或者以select,insert為主的應用基本上可以用這個引擎來建立表,適合寫多的情況。frm儲存當前資料表的結構,myd儲存當前表的資料,myi儲存當前資料表的索引 支援表級...

mysql資料庫儲存引擎

我們在 mysql儲存引擎有哪些 一節中介紹了 mysql 中幾種主要的儲存引擎以及它們的使用特性,本節將介紹如何根據不同的應用場景去選擇合適的儲存引擎。在使用 mysql 資料庫管理系統時,選擇乙個合適的儲存引擎是乙個非常複雜的問題。不同的儲存引擎都有各自的特性 優勢和使用的場合,正確的選擇儲存引...