濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > MySQL學(xué)習(xí)教程之聚簇索引

MySQL學(xué)習(xí)教程之聚簇索引

熱門標(biāo)簽:廣東人工電話機(jī)器人 湖南人工外呼系統(tǒng)多少錢 申請(qǐng)外呼電話線路 石家莊電商外呼系統(tǒng) 百度地圖圖標(biāo)標(biāo)注中心 南通自動(dòng)外呼系統(tǒng)軟件 芒果電話機(jī)器人自動(dòng)化 信陽(yáng)穩(wěn)定外呼系統(tǒng)運(yùn)營(yíng)商 日照旅游地圖標(biāo)注

聚簇,其實(shí)是相對(duì)于InnoDB這個(gè)數(shù)據(jù)庫(kù)引擎來(lái)說(shuō)的,因此在將聚簇索引的時(shí)候,我們通過(guò)InnoDB和MyISAM這兩個(gè)MySQL的數(shù)據(jù)庫(kù)引擎展開(kāi)。

InnoDB和MyISAM的數(shù)據(jù)分布對(duì)比

CREATE TABLE test (col1 int NOT NULL,
     col2 int NOT NULL,
     PRIMARY KEY(col1),
     KEY(col2));

首先通過(guò)以上SQL語(yǔ)句創(chuàng)建出一個(gè)表格,其中col1是主鍵,兩列數(shù)據(jù)均創(chuàng)建了索引。然后我們數(shù)據(jù)的主鍵取值為1-10000,按照隨機(jī)的順序插入數(shù)據(jù)庫(kù)中。

MyISAM的數(shù)據(jù)分布

MyISAM的數(shù)據(jù)存儲(chǔ)邏輯比較簡(jiǎn)單,就是按照數(shù)據(jù)插入的順序創(chuàng)建出一個(gè)數(shù)據(jù)表格。直觀上來(lái)看如下圖:

可以看出,數(shù)據(jù)就是按照插入的順序“一行一行”生成的。前面還會(huì)有一個(gè)行號(hào)的字段,用處就是在查找到索引的時(shí)候能夠快速地定位到該行索引的位置。

我們?cè)賮?lái)看一下具體的細(xì)節(jié):

上圖展示的情況就是在MyISAM引擎下,按照主鍵建立的索引的具體實(shí)現(xiàn)。可以看出在主鍵按照順序排列在葉子結(jié)點(diǎn)上的同時(shí),節(jié)點(diǎn)中還存儲(chǔ)著這個(gè)主鍵在數(shù)據(jù)庫(kù)表格中存在的具體的行號(hào),正如我們上面所說(shuō)的,這個(gè)行號(hào)可以幫助我們快速地定位到表中數(shù)據(jù)的位置,也可以把這個(gè)行號(hào)理解為一個(gè)指針,指向了這個(gè)主鍵所在的具體數(shù)據(jù)行。

那么如果我們按照col2建立索引呢?會(huì)有什么不同嗎?答案是不會(huì)的:

所以得到的結(jié)論就是在MyISAM中建立索引是否是主鍵索引其實(shí)是沒(méi)有區(qū)別的,唯一不同的就是這是一個(gè)“主鍵的索引”。

InnoDB的數(shù)據(jù)分布

因?yàn)镮nnoDB支持聚簇索引,所以會(huì)與MyISAM上的索引實(shí)現(xiàn)方式有所區(qū)別。

我們先看看基于主鍵的聚簇索引在InnoDB上的實(shí)現(xiàn)方式:

首先,和MyISAM上的主鍵索引一樣,這里的索引的葉子結(jié)點(diǎn)上同樣也是包括了主鍵的值,并且主鍵的值是按照順序排列的。不同的是,每一個(gè)葉子結(jié)點(diǎn)還包括了事務(wù)id,回滾指針和其他非主鍵列的值(這里指的col2)。所以我們可以理解為InnoDB上的聚簇索引,是將原來(lái)表格中的所有的行數(shù)據(jù)按照主鍵進(jìn)行排列然后放在了索引的葉子節(jié)點(diǎn)上。這就是一個(gè)與MyISAM在主鍵索引上的一個(gè)不同。 MyISAM的主鍵索引在查找到對(duì)應(yīng)的主鍵值之后需要通過(guò)指針(行號(hào))再去表中找到相對(duì)應(yīng)的數(shù)據(jù)行,而InnoDB的主鍵索引,將數(shù)據(jù)信息全部放在了索引里面,可以直接在索引中查找拿到。

再來(lái)看看InnoDB中的二級(jí)索引的情況:

可以看到,和InnoDB中的主鍵索引不同,二級(jí)索引并沒(méi)有在葉子結(jié)點(diǎn)存儲(chǔ)所有的行數(shù)據(jù)信息,而是除了索引列的值外,只存儲(chǔ)了這個(gè)數(shù)據(jù)行所對(duì)應(yīng)的主鍵的信息。我們知道在MyISAM中,二級(jí)索引和主鍵索引一樣,除了索引列的值外,只存儲(chǔ)了一個(gè)指針(行號(hào))的信息。

對(duì)比一下兩個(gè)引擎上的二級(jí)索引。即存儲(chǔ)指針和存儲(chǔ)主鍵值的優(yōu)劣。

首先存儲(chǔ)主鍵值會(huì)比只存儲(chǔ)一個(gè)指針帶來(lái)的空間開(kāi)銷更大。但是當(dāng)我們數(shù)據(jù)表在進(jìn)行分裂或者其他改變結(jié)構(gòu)的操作的時(shí)候,存儲(chǔ)主鍵值的索引并不會(huì)收到影響,而存儲(chǔ)指針的索引,可能就要重新進(jìn)行更新維護(hù)。

用一個(gè)圖對(duì)兩個(gè)引擎中的兩種索引進(jìn)行對(duì)比:

總結(jié)

到此這篇關(guān)于MySQL學(xué)習(xí)教程之聚簇索引的文章就介紹到這了,更多相關(guān)MySQL聚簇索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解MySQL 聚簇索引與非聚簇索引
  • mysql聚簇索引的頁(yè)分裂原理實(shí)例分析
  • 一看就懂的MySQL的聚簇索引及聚簇索引是如何長(zhǎng)高的

標(biāo)簽:公主嶺 合肥 阿里 天津 呼和浩特 牡丹江 惠州 沈陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL學(xué)習(xí)教程之聚簇索引》,本文關(guān)鍵詞  MySQL,學(xué)習(xí)教程,之聚簇,索引,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL學(xué)習(xí)教程之聚簇索引》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MySQL學(xué)習(xí)教程之聚簇索引的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    綦江县| 游戏| 平山县| 汾西县| 杭锦旗| 嵊州市| 军事| 余姚市| 哈巴河县| 抚宁县| 马龙县| 汶上县| 卓资县| 阳原县| 望奎县| 青铜峡市| 瑞昌市| 伊宁市| 南投市| 四平市| 平阳县| 长沙市| 扎囊县| 图们市| 兴城市| 全南县| 长岛县| 桑植县| 西华县| 阳新县| 仙桃市| 叙永县| 久治县| 犍为县| 新昌县| 新化县| 武夷山市| 佛教| 东台市| 孟州市| 岑溪市|