Mysql的兩種存儲引擎---InnoDB、MylSAM(面試題)

數據庫引擎是數據庫底層軟件組織,數據庫管理系統(DBMS)使用數據庫引擎進行創建、查詢、更新和刪除數據,不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以獲得特定的功能。

打開cmd,輸入cmd -u root -p,輸入密碼進入

  1. 創建數據庫 create database demo1;
  2. 查詢所有的當前數據庫連接的庫  show databases;
  3. 進入其中某個庫,use demo1;
  4. 查看其中所有的表 show tables;
  5. 查詢當前表的所有的字段 show create table personyhb;
  6. 查詢自己的數據庫用的引擎 SHOW ENGINES;

有InnoDB、MRG MYISAM、MEMORY、BLACKHOLE、MyISAM、CSV、archive、performance_schema、federated

可以看出數據庫爲我們提供了非常多的存儲引擎,從表中看出,InnoDB的Support列是default,表明InnoDB是默認的數據庫引擎,不過Mysql對於多引擎有很好的兼容 ,一個數據庫服務器上不同的服務器上完全可以使用不同的數據引擎,甚至一個數據庫中的多個表可以使用多個不同引擎。

兩者之間的差異:

InnoDB----Support transactions,row-level lockings and foreign keys
(1)InnoDB支持事務,MyISAM不支持,對於InnoDB每條SQL語句都默認封裝成事務提交,這樣就會影響速度,,優化速度的方式就是將多條SQL語句放在begin和end之間,組成一個事務。

(2) InnoDB支持外鍵,而MyISAM不支持

(3)InnoDB不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM更高。

所以如果一個表修改要求比較高的事務處理,可以選擇InnoDB。數據庫中可以將查詢要求比較高的表選擇MyISAM存儲。如果該數據庫需要一個用於查詢的臨時表,甚至可以考慮選擇MEMORY存儲引擎。

                     二.存儲引擎原理

1. InnoDB、MylSAM兩者引擎所用的索引的數據結構都是B+樹,不過區別在於:

MylSAM中的B+樹的數據結構存儲的內容是實際數據的地址值,它的索引和實際數據是分開的,只不過使用索引指向實際數據,這種索引的模式被成爲非聚集索引。

InnoDB中B+樹的數據結構存儲的都是實際的數據,這種索引稱爲聚集索引。

 

 

什麼是索引:

唯一索引:唯一索引不允許具有相同的索引值

主鍵索引:是唯一索引的特殊類型,爲表定義一個主鍵,將自動創建主鍵索引。主鍵索引要求主鍵中每個值是唯一的,並且不能爲空。

聚集索引(clustered)表中各行的物理順序與鍵值的邏輯(索引)順序相同,每個表只能有一個。

非聚集索引(Non-clustered):非聚集索引指定表的邏輯順序,數據存儲在一個位置,索引存儲在另一個位置,索引中包含數據存儲位置的一個指針,可以有多個,小於249個。

 

MyISAM:它的索引文件僅僅保存數據記錄的地址。

MyISAM 中索引檢索的算法爲首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,則取出其 data 域的值,然後以 data 域的值爲地址,讀取相應數據記錄。

 

由於 InnoDB 利用的數據庫主鍵作爲索引 Key,所以 InnoDB 數據表文件本身就是主索引,且因爲 InnoDB 數據文件需要按照主鍵聚集,所以使用 InnoDB 作爲數據引擎的表需要有個主鍵,如果沒有顯式指定的話 MySQL 會嘗試自動選擇一個可以唯一標識數據的列作爲主鍵,如果無法找到,則會生成一個隱含字段作爲主鍵,這個字段長度爲6個字節,類型爲長整形。

參照整理:https://mp.weixin.qq.com/s?__biz=MzI4Mzc5NDk4MA==&mid=2247486569&idx=2&sn=97110c3d1b682c8dbb5f4e265ba715a3&chksm=eb840722dcf38e343fe8d48ad491a39d0d8015425c743fcf2febf98d577f47b4a7f23559d5a3&scene=0&xtrack=1#rd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章