InnoDB儲存引擎

2021-10-09 03:51:30 字數 2630 閱讀 7826

內外存交換的基本單位:mysql將資料從外存讀入記憶體不是以記錄為單位,這樣消耗太大,是以頁為單位,每個頁裡填充記錄。每頁大小為16kb

記錄堆:行記錄儲存區,分為有效記錄和已刪除記錄兩種

自由空間鍊錶:已刪除記錄組成的鍊錶

未分配空間

頁尾:儲存頁面校驗資訊

頁內的資料是按照主鍵的順序有序儲存的。

(1)順序保證

頁內資料的組織用的是邏輯連續,不需要移動資料。頁和頁之間用雙向指標連線。

(2)插入策略

插入時優先插入自由空間鍊錶,滿了再插入未分配空間。

(3)頁內查詢

由於頁內使用邏輯連續,所以類似乙個鍊錶。如果要使用遍歷那效率太低,這時用到了頁內的slot區。

slot將一條鍊錶分為了多個段,每次查詢時只需要先用二分查詢定位到資料所在段對應的slot,再從子鍊錶中遍歷查詢資料。

1.聚簇索引

聚簇索引就是將資料和索引存在一起,資料是按主鍵的順序儲存的。在innodb中的主鍵索引就是聚簇索引。

2.二級索引

非聚簇索引也叫二級索引。葉子結點的資料域不是行資料,而是主鍵的值。

通過二級索引查詢資料時,需要用主鍵值回表查詢。

3.聯合索引

key包含多列,排序時先比較第一列,第一列相等再比較第二列。

最左匹配原則:如果不是按照最左開始查詢,無法使用索引。不能跳過中間列。某列使用範圍查詢,後面的列不能使用索引。

假如建立索引(a,b,c),查詢條件為b=xx,a=xx,c=xx時,資料庫會進行優化,依然可以使用聯合索引

1.儲存空間

儲存空間的直觀表現就是索引檔案大小。

字段大小決定著頁內節點個數,從而決定頁的層數

2.主鍵選擇

可以自定義一種業務主鍵,有意義且遞增,那寫入、查詢磁碟利用率都高。可以使用一級索引。

3.聯合索引使用

建立索引時,按照索引的區分度排序,因為這樣可以過濾更多的資料。

索引覆蓋:如果要查詢的資料都被聯合索引覆蓋,那麼就不需要回表查詢了。

比如建立聯合索引(a,b),那麼以下查詢語句就不需要回表查詢:

select a,b from

table

where a = x1 and b = x2;

4.字串索引

字串索引要設定合理長度,比如乙個512位元組的字段,可以只取前10個位元組建立索引,否則效率太低。

不支援%開頭的模糊查詢。(會全表掃瞄)

使用記憶體池,在真正使用記憶體之前,先申請分配一定數量的、大小相等(一般情況下)的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠再繼續申請新的記憶體。

(1)頁面分類

空閒頁、資料頁、髒頁。髒頁是指這一頁的資料被修改,需要重新整理回磁碟。

(2)頁面淘汰

演算法lru:least recently used的縮寫,即最近最少使用。

存在問題

全表掃瞄對記憶體的影響:假如要進行全表掃瞄,記憶體完全不夠用,此時的lru近乎失效。所有的熱資料都會從記憶體中被替換出去,那該怎麼辦?

思路:

mysql解決措施

將lru表分為冷熱兩段。當有新的頁被載入進記憶體時,會放在lru_old的頭部。

InnoDB 儲存引擎

innodb是事務型資料庫的首選引擎,支援事務安全表 acid 支援行鎖定和外來鍵。mysql 5.5.5 之後,innodb作為預設儲存引擎。innodb的主要特性有一下幾項。a.innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事務安全 acid相容 儲存引擎。innodb鎖定在行級並...

InnoDB 儲存引擎

設計上採用了類似於oracle資料庫的架構 接下來 詳細介紹 innodb 儲存引擎的 體系架構 及其不同於其他儲存引擎的特性 一 概述 innodb 儲存引擎 是第乙個完整支援acid事物的 mysql 儲存引擎 特點 1 行鎖設計 2 支援mvcc 3 提供一致性非鎖定讀 4 最有效地利用 以及...

InnoDB儲存引擎

後台程序 innodb緩衝池 磁碟檔案 主要是負責重新整理快取池裡的資料,保證緩衝池中的資料是最近的。master thread 將緩衝池中的資料非同步重新整理到磁碟中,保證資料的一致性。io thread 使用大量的aio進行io呼叫,處理io請求 innodb write io threads ...