【MySQL技術內幕】24-InnoDB儲存引擎索引概述
InnoDB儲存引擎支援以下幾種常見的索引:
- B+樹索引
- 全文索引
- 雜湊索引
前面已經提到過, InnoDB儲存引擎支援的雜湊索引是自適應的, InnoDB儲存引擎會根據表的使用情況自動為表生成雜湊索引,不能人為干預是否在一張表中生成雜湊索引。
B+樹紫引就是傳統意義上的索引,這是目前關係型資料庫系統中查詢最為常用和最為有效的索引。B+樹索引的構造類似於二叉樹,根據鍵值( Key value)快速找到資料。
注意B+樹中的B不是代表二叉( binary),而是代表平衡( balance),因為B+樹是從最早的平衡二叉樹演化而來,但是B+樹不是一個二又樹。
另一個常常被DBA忽視的問題是:B+樹索引並不能找到一個給定鍵值的具體行B+樹索引能找到的只是被查詢資料行所在的頁。然後資料庫通過把頁讀人到記憶體,再在記憶體中進行查詢,最後得到要查詢的資料。
相關推薦
【MySQL技術內幕】24-InnoDB儲存引擎索引概述
InnoDB儲存引擎支援以下幾種常見的索引: B+樹索引 全文索引 雜湊索引 前面已經提到過, InnoDB儲存引擎支援的雜湊索引是自適應的, InnoDB儲存引擎會根據表的使用情況自動為表生成雜湊索引,不能人為干預是否在一張表中生成雜湊索引。 B+樹紫引就是傳統意義
【MySQL技術內幕】35-InnoDB儲存引擎中的鎖
1、鎖的型別 InnoDB儲存引擎實現瞭如下兩種標準的行級鎖: 共享鎖( S Lock),允許事務讀一行資料。 排他鎖( X LocK),允許事務刪除或更新一行資料。 如果一個事務T1已經獲得了行r的共享鎖,那麼另外的事務T2可以立即獲得行r的共享鎖,因為讀取並沒有改變
【MySQL技術內幕】17-InnoDB邏輯儲存結構
從 InnoDB儲存引擎的邏輯儲存結構看,所有資料都被邏輯地存放在一個空間中,稱之為表空間( tablespace)。表空間又由段(segment)、區( extent)、頁(page)組成。頁在一些文件中有時也稱為塊( block), InnoDB儲存引擎的邏輯儲存結構大致
【MySQL技術內幕】18-InnoDB行記錄格式
InnoDB儲存引擎和大多數資料庫一樣(如 Oracle和 Microsoft SQL Server資料庫),記錄是以行的形式儲存的。這意味著頁中儲存著表中一行行的資料。在 InnoDB1.0.x版本之前, InnoDB儲存引擎提供了 Compact和 Redundant兩種
【MySQL技術內幕】01-MySQL體系結構和儲存引擎
1、定義資料庫和例項 在資料庫領域中有兩個同很容易混淆,這就是“資料庫”(database)和“例項”(instance)。作為常見的資料庫術語,這兩個詞的定義如下。 資料庫:物理作業系統檔案或其他形式檔案型別的集合。在MySQL資料庫中,資料庫檔案可以是ftm、MYD、
【MySQL技術內幕】03-Checkpoint技術
前面已經講到了,緩衝池的設計目的為了協調CPU速度與磁碟速度的鴻溝。因此頁的操作首先都是在緩衝池中完成的。如果一條DML語句,如Update或Delete改變了頁中的記錄,那麼此時頁是髒的,即緩衝池中的頁的版本要比磁碟的新。資料庫需要將新版本的頁從緩衝池重新整理到磁碟。 倘
【MySQL技術內幕】10-啟動關閉與恢復
InnoDB是 MySQL資料庫的儲存引擎之一,因此 InnoDB儲存引擎的啟動和關閉,更準確的是指在 MySQL例項的啟動過程中對 InnoDB儲存引擎的處理過程。 在關閉時,引數 innodb fast shutdown影響著表的儲存引擎為 InnoDB的行為該引數可取值
【MySQL技術內幕】13-套接字檔案和pid檔案
1、套接字檔案 前面提到過,在UNX系統下本地連線 MySQL可以採用UNX域套接字方式,這種方式需要一個套接字( socket)檔案。套接字檔案可由引數 socket控制。一般在/tmp目錄下,名為 mysql. sock: mysql> SHOW VARIABL
【MySQL技術內幕】16-索引組織表
在 InnoDB儲存引擎中,表都是根據主鍵順序組織存放的,這種儲存方式的表稱為索引組織表( index organized table)。在 InnoDB儲存引擎表中,每張表都有個主鍵( Primary Key),如果在建立表時沒有顯式地定義主鍵,則 InnoDB儲存引擎會按
【MySQL技術內幕】25-B+樹的操作
B+樹中,所有記錄節點都按照鍵值的大小順序放在同一層葉子節點,各個葉子節點指標進行連線。 圖中指標是單向的,但是書上的圖是雙向的,而且旋轉應該也是雙向才能完成) B+樹插入處理 Leaf
【MySQL技術內幕】26-聚集索引與輔助索引
聚集索引 Innodb中每張表都會有一個聚集索引,其行記錄存在該索引的葉子節點上。 葉子節點通過雙向連結串列連結,按照主鍵的順序排序 頁中的記錄也是雙向連結串列進行維護,物理上可以不按照順序儲存。 所有索引只能定位到頁,不能通過索引定位到具體的行,到頁後通過Page
【MySQL技術內幕】30-B+樹索引的使用
1、不同應用中B+樹索引的使用 在瞭解了B+樹索引的本質和實現後,下一個需要考慮的問題是怎樣正確地使用B+樹索引,這不是一個簡單的問題。這裡所總結的可能並不適用於所有的應用場合。我所能做的只是概括一個大概的方向。在實際的生產環境使用中,每個DBA和開發人員,還是需要根據自己
【MySQL技術內幕】34-lock與latch
這裡還要區分鎖中容易令人混淆的概念lock與 latch。在資料庫中,lock與 latch都可以被稱為“鎖”。但是兩者有著截然不同的含義,本章主要關注的是lock。 latch一般稱為閂鎖(輕量級的鎖),因為其要求鎖定的時間必須非常短。若持續的時間長,則應用的效能會非常差
【MySQL技術內幕】36-一致性的非鎖定讀
一致性的非鎖定讀( consistent nonlocking read)是指 InnoDB儲存引擎通過行多版本控制(multi versioning)的方式來讀取當前執行時間資料庫中行的資料。如果讀取的行正在執行 DELETE或 UPDATE操作,這時讀取操作不會因此去等待
【MySQL技術內幕】39-外來鍵和鎖
外來鍵主要用於引用完整性的約束檢查。在 InnoDB儲存引擎中,對於一個外來鍵列,如果沒有顯式地對這個列加索引, InnoDB儲存引擎自動對其加一個索引,因為這樣可以避免表鎖——這比 Oracle資料庫做得好, Oracle資料庫不會自動新增索引,使用者必須自已手動新增,這也
【MySQL技術內幕】54-分散式事物
1、MySQL資料庫分散式事務 InnoDB儲存引擎提供了對XA事務的支援,並通過XA事務來支援分散式事務的實現。分散式事務指的是允許多個獨立的事務資源(transactional resources)參與到一個全域性的事務中。事務資源通常是關係型資料庫系統,但也可以是其他
【MySQL技術內幕】57-備份與恢復概述
可以根據不同的型別來劃分備份的方法。根據備份的方法不同可以將備份分為: Hot Backup(熱備) Cold Backup(冷備) Warm Backup(溫備) Hot Backup是指資料庫執行中直接備份,對正在執行的資料庫操作沒有任何的影響。這種方式在 MySQ
【MySQL技術內幕】61-熱備份
1、ibbackup ibbackup是 InnoDB儲存引擎官方提供的熱備工具,可以同時備份 MyISAM儲存引擎和 InnoDB儲存引擎表。對於 InnoDB儲存引擎表其備份工作原理如下: 記錄備份開始時, InnoDB儲存引擎重做日誌檔案檢查點的LSN。 複製共享
【MySQL技術內幕】63-複製
1、複製的工作原理 複製(replication)是MySQL資料庫提供的一種高可用高效能的解決方案,一般用來建立大型的應用。總體來說, replication的工作原理分為以下3個步驟: 主伺服器(master)把資料更改記錄到二進位制日誌(binlog)中。 從伺服
【MySQL技術內幕】62-快照備份
MySQL資料庫本身並不支援快照功能,因此快照備份是指通過檔案系統支援的快照功能對資料庫進行備份。備份的前提是將所有資料庫檔案放在同一檔案分割槽中,然後對該分割槽進行快照操作。支援快照功能的檔案系統和裝置包括 FreeBSD的UFS檔案系統, Solaris的ZFS檔案系統,