搜尋
首頁資料庫mysql教程mysql儲存引擎差異有哪些

mysql儲存引擎差異有哪些

May 06, 2019 am 11:33 AM
innodbmyisam

MySQL中儲存引擎的區別:以Innodb和myisam為例,前者支援事務而後者不支援;前者強調多功能性,支援的拓展功能比較多,後者主要專注於效能;前者不支援全文索引,而後者支援全文索引等

mysql儲存引擎差異有哪些

mysql支援儲存引擎有好幾種,咱們這裡主要討論一下常用的幾種儲存引擎。 Innodb,myisam

INNODB

INNODB索引實作

與MyISAM相同的一點是,InnoDB 也採用B Tree這種資料結構來實作B-Tree索引。而很大的區別在於,InnoDB 儲存引擎採用“聚集索引”的資料儲存方式實現B-Tree索引,所謂“聚集”,就是指資料行和相鄰的鍵值緊湊地儲存在一起,注意InnoDB 只能聚集一個葉子頁(16K)的記錄(即聚集索引滿足一定的範圍的記錄),因此包含相鄰鍵值的記錄可能會相距甚遠。

在InnoDB 中,表被稱為索引組織表(index organized table),InnoDB 依照主鍵建構一顆B Tree (如果沒有主鍵,則會選擇一個唯一的且非空索引替代,如果沒有這樣的索引,InnoDB則會隱式地定義一個主鍵來作為聚集索引),同時葉子頁中存放整張表的行記錄數據,也可以將聚集索引的葉子節點稱為數據頁,非葉子頁可以看做是葉子頁的稀疏索引。

下圖說明了 InnoDB聚集索引的實作方式,同時也體現了一個 innoDB表的結構,可以看到,InnoDB 中,主鍵索引和資料是一體的,沒有分開。

mysql儲存引擎差異有哪些

這種實作方式,給予了 InnoDB 按主鍵檢索的超高效能。可以有目的性地選擇聚集索引,例如一個郵件表,可以選擇用戶ID來聚集數據,這樣只需要從磁碟讀取較少並且連續的數據頁就能獲得某個id的用戶全部的郵件,避免了讀取分散頁時所耗費的隨機I/O。

InnoDB 是 I/O 操作,Innodb讀寫採用MVCC來支援高並發。

全表掃描

當InnoDB做全表掃描時並不高效,因為InnoDB 實際上並沒有順序讀取,在大多情況下是在隨機讀取取。做全表掃描時,InnoDB 會依主鍵順序掃描頁面和行。這應用於所有的InnoDB 表,包括碎片化的表。如果主鍵頁表沒有碎片(儲存主鍵和行的頁表),全表掃描是相當快,因為讀取順序接近實體儲存順序。但是當主頁有碎片時,該掃描就會變得十分緩慢

行級鎖定

#提供行鎖(locking on row level),提供與Oracle類型一致的不加鎖讀取(non-locking read in SELECTs),另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表,例如

update table set num=1 where name like “%aaa%”

MYISAM

MyISAM索引的實作

每個MyISAM在磁碟上儲存成三個文件。第一個檔案的名字以表格的名字開始,副檔名指出檔案類型。 MyISAM索引檔案【.MYI (MYIndex)】和資料檔案【.MYD (MYData)】是分離的,索引檔案只儲存記錄所在頁的指標(實體位置),透過這些位址來讀取頁,進而讀取被索引的行。先來看看結構圖 

mysql儲存引擎差異有哪些

上圖很好地說明了樹中葉子保存的是對應行的物理位置。透過這個值,儲存引擎能順利地進行回表查詢,得到一行完整記錄。同時,每個葉子頁也保存了指向下一個葉子頁的指標。從而方便葉子節點的範圍遍歷。而對於二級索引,在MyISAM儲存引擎中以與上圖同樣的方式實現,這也說明了MyISAM的索引方式是“非聚集的”,與Innodb的“聚集索引”形成了對比

#MyISAM 預設會把索引讀入內存,直接在內存中操作;

表級鎖定

##小結:Innodb強調多功能性,支援的拓展功能比較多,myisam主要專注於效能

區別

1、InnoDB支援事務,MyISAM不支持,對於InnoDB每一條SQL語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;

#2、InnoDB是聚集索引,資料檔是和索引綁在一起的,必須要有主鍵,透過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,再透過主鍵查詢到資料。因此,主鍵不應該太大,因為主鍵太大,其他索引也會很大。而MyISAM是非聚集索引,資料檔案是分離的,索引保存的是資料檔案的指標。主鍵索引和輔助索引是獨立的。

3、InnoDB不儲存表格的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變數保存了整個表的行數,執行上述語句時只需要讀出該變數即可,速度很快;

4、Innodb不支援全文索引,而MyISAM支援全文索引,查詢效率上MyISAM要高;

以上是mysql儲存引擎差異有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL:世界上最受歡迎的數據庫的簡介MySQL:世界上最受歡迎的數據庫的簡介Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的重要性:數據存儲和管理MySQL的重要性:數據存儲和管理Apr 12, 2025 am 12:18 AM

MySQL是一個開源的關係型數據庫管理系統,適用於數據存儲、管理、查詢和安全。 1.它支持多種操作系統,廣泛應用於Web應用等領域。 2.通過客戶端-服務器架構和不同存儲引擎,MySQL高效處理數據。 3.基本用法包括創建數據庫和表,插入、查詢和更新數據。 4.高級用法涉及復雜查詢和存儲過程。 5.常見錯誤可通過EXPLAIN語句調試。 6.性能優化包括合理使用索引和優化查詢語句。

為什麼要使用mysql?利益和優勢為什麼要使用mysql?利益和優勢Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。Apr 12, 2025 am 12:16 AM

InnoDB的鎖機制包括共享鎖、排他鎖、意向鎖、記錄鎖、間隙鎖和下一個鍵鎖。 1.共享鎖允許事務讀取數據而不阻止其他事務讀取。 2.排他鎖阻止其他事務讀取和修改數據。 3.意向鎖優化鎖效率。 4.記錄鎖鎖定索引記錄。 5.間隙鎖鎖定索引記錄間隙。 6.下一個鍵鎖是記錄鎖和間隙鎖的組合,確保數據一致性。

MySQL查詢性能差的常見原因是什麼?MySQL查詢性能差的常見原因是什麼?Apr 12, 2025 am 12:11 AM

MySQL查询性能不佳的原因主要包括没有使用索引、查询优化器选择错误的执行计划、表设计不合理、数据量过大和锁竞争。1.没有索引导致查询缓慢,添加索引后可显著提升性能。2.使用EXPLAIN命令可以分析查询计划,找出优化器错误。3.重构表结构和优化JOIN条件可改善表设计问题。4.数据量大时,采用分区和分表策略。5.高并发环境下,优化事务和锁策略可减少锁竞争。

您什麼時候應該使用複合索引與多個單列索引?您什麼時候應該使用複合索引與多個單列索引?Apr 11, 2025 am 12:06 AM

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)Apr 10, 2025 am 09:36 AM

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL:開發人員的基本技能MySQL和SQL:開發人員的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能