91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL存儲引擎中的索引分析

發布時間:2021-11-20 09:09:00 來源:億速云 閱讀:137 作者:iii 欄目:MySQL數據庫

本篇內容主要講解“MySQL存儲引擎中的索引分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL存儲引擎中的索引分析”吧!

MySQL存儲引擎中的索引分析

我們知道不同的存儲引擎文件是不一樣,我們可以查看數據文件目錄:

show VARIABLES LIKE 'datadir';

每 張 InnoDB 的 表 有 兩 個 文 件 ( .frm 和 .ibd ),MyISAM 的 表 有 三 個 文 件 (.frm、.MYD、.MYI)。相關推薦:mysql視頻教程】

有一個是相同的文件,.frm .frm是 MySQL 里面表結構定義的文件,不管你建表的時候選用任何一個存儲引擎都會生成,我們就不看了。

我們主要看一下其他兩個文件是怎么實現 MySQL 不同的存儲引擎的索引的。

我們先來看下 MyISAM。

MyISAM

在 MyISAM 里面,另外有兩個文件:

一個是.MYD文件,D 代表 Data,是 MyISAM 的數據文件,存放數據記錄,比如我們的 user_myisam 表的所有的表數據。

一個是.MYI 文件,I 代表 Index,是 MyISAM 的索引文件,存放索引,比如我們在 id 字段上面創建了一個主鍵索引,那么主鍵索引就是在這個索引文件里面。

也就是說,在 MyISAM 里面,索引和數據是兩個獨立的文件。那我們怎么根據索引找到數據呢?

MyISAM 的 B+Tree 里面,葉子節點存儲的是數據文件對應的磁盤地址。所以從索引文件.MYI 中找到鍵值后,會到數據文件.MYD 中獲取相應的數據記錄。

MySQL存儲引擎中的索引分析

這里畫的是主鍵索引,如果是輔助索引,有什么不一樣呢?

在 MyISAM 里面,輔助索引也在這個.MYI 文件里面。 輔助索引跟主鍵索引存儲和檢索數據的方式是沒有任何區別的,一樣是在索引文件里面找到磁盤地址,然后到數據文件里面獲取數據。

MySQL存儲引擎中的索引分析

InnoDB

InnoDB 只有一個文件(.ibd 文件),那索引放在哪里呢?

在 InnoDB 里面,它是以主鍵為索引來組織數據的存儲的,所以索引文件和數據文件是同一個文件,都在.ibd 文件里面。

在 InnoDB 的主鍵索引的葉子節點上,它直接存儲了我們的數據。

MySQL存儲引擎中的索引分析

什么叫做聚集索引(聚簇索引)?

就是索引鍵值的邏輯順序跟表數據行的物理存儲順序是一致的。(比如字典的目錄是按拼音排序的,內容也是按拼音排序的,按拼音排序的這種目錄就叫聚集索引)。

在 InnoDB 里面,它組織數據的方式叫做叫做(聚集)索引組織表(clustered index organize table),所以主鍵索引是聚集索引,非主鍵都是非聚集索引。

主鍵之外的索引,比如我們在 name 字段上面建的普通索引,又是怎么存儲和檢索數據的呢?

MySQL存儲引擎中的索引分析

InnoDB 中,主鍵索引和輔助索引是有一個主次之分的。

輔助索引存儲的是輔助索引和主鍵值。如果使用輔助索引查詢,會根據主鍵值在主鍵索引中查詢,最終取得數據。

比如我們用 name 索引查詢 name= '青山',它會在葉子節點找到主鍵值,也就是 id=1,然后再到主鍵索引的葉子節點拿到數據。

另一個問題,如果一張表沒有主鍵怎么辦?

1、如果我們定義了主鍵(PRIMARY KEY),那么 InnoDB 會選擇主鍵作為聚集索引。

2、如果沒有顯式定義主鍵,則 InnoDB 會選擇第一個不包含有 NULL 值的唯一索引作為主鍵索引。

3、如果也沒有這樣的唯一索引,則 InnoDB 會選擇內置 6 字節長的 ROWID 作為隱藏的聚集索引,它會隨著行記錄的寫入而主鍵遞增。

select _rowid name from t2;

所以呢?不會存在沒有主鍵的表。

到此,相信大家對“MySQL存儲引擎中的索引分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

友谊县| 手游| 松滋市| 琼海市| 隆德县| 永吉县| 宁德市| 开原市| 长阳| 临澧县| 齐河县| 交城县| 五常市| 雷波县| 邹城市| 凤阳县| 余庆县| 霍州市| 大新县| 吉木萨尔县| 莱阳市| 格尔木市| 昌邑市| 贵定县| 南开区| 九江市| 桃江县| 威远县| 邵阳市| 津市市| 天长市| 武宁县| 娄烦县| 灵武市| 邵东县| 滨海县| 杭锦后旗| 凉城县| 岚皋县| 清远市| 永安市|