mysql 事件引擎 MYSQL儲存引擎的比較

2021-10-18 20:55:31 字數 2539 閱讀 5807

為什麼mysql的儲存引擎myisam比innodb查詢速度快

myisam只有索引快取

innodb不分索引檔案資料檔案 innodb buffer

myisam只能管理索引,在索引資料大於分配的資源時,會由作業系統來cache;資料檔案依賴於作業系統的cache。innodb不管是索引還是資料,都是自己來管理

innodb buffer pool夠大, innodb的資料會全快取進記憶體;而myisam只有索引在記憶體裡, 其他欄位的快取還得依賴os本身的cache

物理結構不同

myisam :每個myisam在磁碟上儲存成三個檔案。第乙個檔案的名字以表的名字開始,副檔名指出檔案型別。

.frm檔案儲存表定義。

資料檔案的擴充套件名為.myd (mydata)。

索引檔案的副檔名是.myi (myindex)

innodb:基於磁碟的資源是innodb表空間資料檔案和它的日誌檔案,innodb 表的大小只受限於作業系統檔案的大小,一般為 2gb

innodb在做select的時候,要維護的東西比myisam引擎多很多;

1)資料塊,innodb要快取,myisam只快取索引塊,  這中間還有換進換出的減少;

2)innodb定址要對映到塊,再到行,myisam 記錄的直接是檔案的offset,定位比innodb要快

3)innodb還需要維護mvcc一致;雖然你的場景沒有,但他還是需要去檢查和維護

mvcc ( multi-version concurrency control )多版本併發控制

innodb:通過為每一行記錄新增兩個額外的隱藏的值來實現mvcc,這兩個值乙個記錄這行資料何時被建立,另外乙個記錄這行資料何時過期(或者被刪除)。但是innodb並不儲存這些事件發生時的實際時間,相反它只儲存這些事件發生時的系統版本號。這是乙個隨著事務的建立而不斷增長的數字。每個事務在事務開始時會記錄它自己的系統版本號。每個查詢必須去檢查每行資料的版本號與事務的版本號是否相同。讓我們來看看當隔離級別是repeatable read時這種策略是如何應用到特定的操作的:

select innodb必須每行資料來保證它符合兩個條件:

1、innodb必須找到乙個行的版本,它至少要和事務的版本一樣老(也即它的版本號不大於事務的版本號)。這保證了不管是事務開始之前,或者事務建立時,或者修改了這行資料的時候,這行資料是存在的。

2、這行資料的刪除版本必須是未定義的或者比事務版本要大。這可以保證在事務開始之前這行資料沒有被刪除。

mysql有多種儲存引擎,myisam和innodb是其中常用的兩種。這裡介紹關於這兩種引擎的一些基本概念(非深入介紹)。

myisam是mysql的預設儲存引擎,基於傳統的isam型別,支援全文搜尋,但不是事務安全的,而且不支援外來鍵。每張myisam表存放在三個檔案中:frm 檔案存放**定義;資料檔案是myd (mydata);索引檔案是myi (myindex)。

innodb是事務型引擎,支援回滾、崩潰恢復能力、多版本併發控制、acid事務,支援行級鎖定(innodb表的行鎖不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表,如like操作時的sql語句),以及提供與oracle型別一致的不加鎖讀取方式。innodb儲存它的表和索引在乙個表空間中,表空間可以包含數個檔案。

主要區別:

myisam是非事務安全型的,而innodb是事務安全型的。

myisam鎖的粒度是表級,而innodb支援行級鎖定。

myisam支援全文型別索引,而innodb不支援全文索引。

myisam相對簡單,所以在效率上要優於innodb,小型應用可以考慮使用myisam。

myisam表是儲存成檔案的形式,在跨平台的資料轉移中使用myisam儲存會省去不少的麻煩。

innodb錶比myisam表更安全,可以在保證資料不會丟失的情況下,切換非事務表到事務表(alter table tablename type=innodb)。

應用場景:

myisam管理非事務表。它提供高速儲存和檢索,以及全文搜尋能力。如果應用中需要執行大量的select查詢,那麼myisam是更好的選擇。

innodb用於事務處理應用程式,具有眾多特性,包括acid事務支援。如果應用中需要執行大量的insert或update操作,則應該使用innodb,這樣可以提高多使用者併發操作的效能。

常用命令:

(1)檢視表的儲存型別(三種):

show create table tablename

show table status from  dbname  where name=tablename

mysqlshow  -u user -p password --status dbname tablename

(2)修改表的儲存引擎:

alter table tablename type=innodb

(3)啟動mysql資料庫的命令列中新增以下引數使新發布的表都預設使用事務:

--default-table-type=innodb

(4)臨時改變預設表型別:

set table_type=innodb

show variables like 'table_type'

mysql BDB儲存引擎 mysql中的儲存引擎

mysql中常用的幾種儲存引擎 innodb bdb myisam memory以及這幾個引擎的講解 innodb儲存引擎 1 innodb儲存引擎該mysql表提供了事務,回滾以及系統崩潰修復能力和多版本迸發控制的事務的安全。2 innodb支援自增長列 auto increment 自增長列的值...

Mysql之InnoDB儲存引擎的邏輯儲存結構

1.mysql 的儲存結構分為 5 級 表空間 段 簇 頁 行 1.表空間可以看做是innodb 儲存引擎邏輯結構的最高層,所有的資料都存放在表空間中。2.表空間分為 系統表空間 獨佔表空間 通用表空間 臨時表空間 undo 表空間。參考 下面的mysql innodb 磁碟儲存結構中對錶空間的介紹...

mysql架構引擎 MySQL引擎

一般來說,mysql有以下幾種引擎 isam myisam heap innodb和berkley 資料庫 一般來說,mysql有以下幾種引擎 isam myisam heap innodb和berkley bdb 注意 不同的版本支援的引擎是有差異的。當然啦,如果你感覺自己的確技術高超,你還能夠使...