MySql資料庫引擎分析

2021-07-15 22:55:14 字數 3059 閱讀 7350

作為程式開發人員,mysql的使用肯定是我們的家常便飯了。但其中蘊含的大量機制和優化策略是我們需要不斷學習和探索的。

今天,我們來分析和討論關於mysql的引擎。

1、各類引擎簡介

首先,在安裝資料庫時,缺省會應用myisam引擎,此時的mysql同時支援isam、myisam和heap。而另外的兩種型別,innodb和berkley(bdb),也可以在需要時,進行切換使用。如果技術高超,還可以使用mysql+api自己做乙個引擎。下面來介紹幾種資料庫引擎:

isam:isam是乙個定義明確且歷經時間考驗的資料**管理方法,它在設計之時就考慮到資料庫被查詢的次數要遠大於更新的次數。因此,isam執行讀取操作的速度很快,而且不占用大量的記憶體和儲存資源。isam的兩個主要不足之處在於:

它不支援事務處理,也不能夠容錯。

如果你的硬碟崩潰了,那麼資料檔案就無法恢復了。如果你正在把isam用在關鍵任務應用

程式裡,那就必須經常備份你所有的實時資料,通過其複製特性,mysql能夠支援這樣的備

份應用程式。

myisam:myisam是mysql的isam擴充套件格式和預設的資料庫引擎。除了提供isam裡所沒有的索引和字段管理的大量功能,myisam還使用一種**鎖定的機制,來優化多個併發的讀寫操作,其代價是你需要經常執行optimize table命令,來恢復被更新機制所浪費的空間。myisam還有一些有用的擴充套件,例如用來修復資料庫檔案的myisamchk工具和用來恢復浪費空間的 myisampack工具。myisam強調了快速讀取操作,這可能就是為什麼mysql受到了web開發如此青睞的主要原因:在web開發中你所進行的大量資料操作都是讀取操作。所以,大多數虛擬主機提供商和internet平台提供商只允許使用myisam格式。myisam格式的乙個重要缺陷就是不能在表損壞後恢復資料。

heap:heap允許只駐留在記憶體裡的臨時**。駐留在記憶體裡讓heap要比isam和myisam都快,但是它所管理的資料是不穩定的,而且如果在關機之前沒有進行儲存,那麼所有的資料都會丟失。在資料行被刪除的時候,heap也不會浪費大量的空間。heap**在你需要使用select表示式來選擇和操控資料的時候非常有用。要記住,在用完**之後就刪除**。

innodb:innodb資料庫引擎都是造就mysql靈活性的技術的直接產品,這項技術就是mysql+api。在使用mysql的時候,你所面對的每乙個挑戰幾乎都源於isam和myisam資料庫引擎不支援事務處理(transaction process)也不支援外來鍵。儘管要比isam和 myisam引擎慢很多,但是innodb包括了對事務處理和外來鍵的支援,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者 或者兩者,那你就要被迫使用後兩個引擎中的乙個了。

如果感覺自己的確技術高超,你還能夠使用mysql+api來建立自己的資料庫引擎。這個api為你提供了操作字段、記錄、**、資料庫、連線、安全帳號的功能,以及建立諸如mysql這樣dbms所需要的所有其他無數功能。

二、重點引擎(innodb和myisam)比較

innodb和myisam是許多人在使用mysql時最常用的兩個表型別,這兩個表型別各有優劣,視具體應用而定。基本的差別為:

(1)myisam型別不支援事務處理等高階處理,而innodb型別支援。

(2)myisam型別的表強調的是效能,其執行速度比innodb型別更快。 

(3)innodb提供了行級鎖和外來鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫系統,mysql執行時innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高時,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表。myiasm不支援行級鎖和外來鍵,因此當insert或update資料時即寫操作需要鎖定整個表,效率便會低一些。但如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支援,那麼myiasm也是很好的選擇。

(4)innodb引擎不支援fulltext型別的索引,而且它沒有儲存表的行數,當select count(*) from table時需要掃瞄全表。而myiasm中儲存了表的行數,於是select count(*) from table時只需要直接讀取已經儲存好的值而不需要進行全表掃瞄,但如果後面有where條件,則兩種引擎掃瞄方式相同。

三、使用場景

分析:一般來說,myisam適合:

(1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。

innodb適合:

(1)可靠性要求比較高,或者要求事務;

(2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況指定資料引擎的建立。

四、mysql更改引擎的方法

檢視資料庫支援的引擎和預設資料庫引擎**:

show engines;

更改方式1:修改配置檔案my.ini

我將my-small.ini另存為my.ini,在[mysqld]最後新增為上default-storage-engine=innodb,重啟服務,資料庫預設的引擎修改為innodb

更改方式2:在建表的時候指定或者建完表修改

mysql** :

--建表的時候指定

create table mytbl(   

id int primary key,

name varchar(50)

)type=myisam;

--建完錶後修改 

alter table mytbl2 type = innodb;
--檢視修改結果(mytest為表所在的database名字)  

show table status from mytest;

show create table table_name

MYSQL資料庫引擎分析

1.什麼是儲存引擎 mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。所以我認為,儲存引擎就是那些具體去幹儲存這...

mysql資料庫引擎 mysql資料庫引擎

資料庫引擎是用於儲存 處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。這包括建立用於儲存資料的表和用於檢視 管理和保護資料安全的資料庫物件 如索引 檢視和...

mysql 資料分析引擎 MYSQL資料庫引擎分析

1.什麼是儲存引擎 mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。所以我認為,儲存引擎就是那些具體去幹儲存這...