MySQL基礎之 儲存引擎

2022-03-22 08:25:59 字數 2732 閱讀 2770

myisam儲存引擎

缺點:不支援事務,不支援外來鍵。只支援表級鎖。

優點:訪問速度快,多用於select、insert語句的高負載操作。僅僅支援全文索引。

myisam快取在記憶體的是索引,不是資料。而innodb快取在記憶體的是資料,相對來說,伺服器記憶體越大,innodb發揮的優勢越大

myisam的儲存檔案:

每個myisam在磁碟上儲存程3個檔案,檔名和表名是相同的,僅僅副檔名不一樣:

1、filename.frm:儲存表定義

2、filename.myd:mydata,即儲存的資料

3、filename.myi:myindex,即儲存的索引

解說:資料檔案和索引檔案可以放在不同的目錄下,需要在建立表的時候通過特定的語句data directory和index directory來指定。

myisam型別的表可能會損壞影響訪問,我們需要myisam型別的表提供的修復工具來修復,

1、check table 語句來檢測表的健康狀態

2、repair table語句來修復乙個損壞的myisam表。

myisam型別的表支援的三種儲存結構:

1、靜態型

靜態表是預設的儲存格式,靜態表中的字段都是非變長字段,例如char等長度不可變的資料型別。

優點:儲存速度快,表的效能比較高,容易快取,出現故障容易恢復。

缺點:占用的空間比較大,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,佔據了整個空間。

我們之前學過varchar和char的區別,在訪問尾部帶有空格字元的字串的時候,我們取資料時varchar取出來的字串尾部帶有空格(保留空格),而char型別取出來的字串尾部的空格字元則會被去掉。同樣在這裡也是,因為我們myisam的表在建立的時候如果是靜態表儲存格式,那麼我們也要注意:如果需要儲存的內容後面本來就帶有空格,那麼在返回的結果也會被去掉。

還要注意的是:靜態表中的資料在儲存時是按照列的寬度定義補足空格,但是在應用訪問的時候並不會得到這些空格,這些空格在返回前已經被去掉了。此外靜態表是myisam儲存引擎預設的儲存格式。

2、動態型

如果列(即使只有一列)定義為動態的資料型別,例如blob、text、varchar等變長資料型別。這時myisam就自動使用動態型表儲存格式。

優點:占用的空間相對較少。

缺點:雖然動態型的表占用了比靜態型表較少的空間,但帶來了效能的降低,因為如果某個欄位的內容發生改變則其位置很可能需要移動,這樣就會導致碎片的產生。隨著資料變化的怎多,碎片就會增加,資料訪問效能就會相應的降低。

對於因為碎片的原因而降低資料訪問性,有兩種解決方法:

1、盡可能使用靜態資料型別 

2、定期執行optimize table語句或者myisamchk-r命令來改善效能。

3、壓縮表

壓縮表有myisampack工具建立,佔據非常小的磁碟空間。

innodb儲存引擎

優缺點

優點:支援事務,具有提交、回滾、崩潰恢復能力等。支援主鍵外來鍵約束。支援併發量大,適用於大量的update、insert操作。

innodb儲存引擎的表的特點:

儲存方式

innodb儲存表和索引有兩種方式

1、使用共享表空間儲存

這種方式建立的表的表結構儲存在.frm檔案中。

共享表空間儲存

多表空間儲存

建立的表的表結構儲存在.frm檔案中。

表存放在innodb_data_home_dir和innodb_data_file_path定義的表空間中。

建立的表的表結構仍然儲存在.frm檔案中。但是每個表的資料和索引又單獨儲存在.ibd檔案中。

對於分割槽表,也有對應的.ibd檔案,詳細查閱資料。

注意:要使用多表空間的儲存方式,需要設定引數「innodb_file_per_tale」。(如下所示說明儲存引擎使用了多表空間的儲存方式。)。並且還要重新啟動服務後才能生效。

疑問處理:

1、對於使用多表空間儲存的引數對新建的表的什麼時候才會生效問題。

1、對於新建的表按照多表空間的方式建立,已有的表仍然使用共享表空間儲存。

2、如果將已有的多表空間方式修改回共享表空間的方式,則新建表會在共享表空間中建立,但是已有的多表空間的表仍然儲存原來的訪問方式。

總結:多表空間的引數生效後,只對新建的表生效。

2、看了上面的理論知識,有人認為是否可以把.frm和.ibd的檔案複製一下直接到別的資料庫恢復一下呢?

不可以的,至於原因我們可以參考深入淺出mysql的第140頁來檢視。我們大多數情況下是將單錶恢復到目標資料庫,還是需要mysqldump和mysqlimport命令來實現。

3、是否在多表空間的儲存方式下,共享表空間就不需要了呢?

mysql的資料存放的目錄下,在建立的資料庫名字下有個.opt檔案,有什麼作用呢?

答:在某些庫目錄下有個db.opt檔案,那這個檔案是幹什麼用的呢?如果你用記事本txt等編輯器開啟看的話,內容很簡單,是用來記錄該庫的預設字符集編碼和字符集排序規則用的。也就是說如果你建立資料庫指定預設字符集和排序規則,那麼後續建立的表如果沒有指定字符集和排序規則,那麼該新建的表將採用db.opt檔案中指定的屬性

MySQL基礎之儲存引擎

儲存引擎就是如何儲存資料,如何為儲存的資料建立索引和如何更新 查詢資料等技術的實現方式。儲存引擎又稱為表型別 即儲存和操作表的型別 因為在關係型資料庫中資料的儲存是以表的形式儲存的。支援插入式儲存引擎 即支援多種儲存引擎 這是mysql資料庫區別於其他資料庫的乙個重要特點。oracle和sql se...

mysql基礎之儲存引擎

mysql 可以將資料以不同的技術儲存在檔案 記憶體 中,這種技術就稱為儲存引擎。每一種儲存引擎使用不同的儲存機制 索引技巧 鎖定水平,提供最廣泛且不同的功能。mysql 支援的儲存引擎 myisam inodb memory csv archive 相關知識之併發處理 併發控制 當多個連線對記錄進...

MySQL基礎九之儲存引擎

1.概念 1.1.mysql用不同的技術將資料儲存在檔案當中,這種技術稱之為儲存引擎。2.併發控制 2.1.當多個連線對記錄進行修改時候為了保持資料的一致性和完整性。1.1種類 1.2.設定儲存引擎 1 通過配置檔案 default storage engine engine name 2 建立資料...