mysql 线上加索引_MySQL加索引都经历了什么?
首先介紹一下MySQL的索引:
主流的索引也就分為兩類:聚簇索引、非聚簇索引
其實(shí)還有什么哈希索引(不適合排序)、唯一索引(相同的插入不進(jìn)來(lái),保證索引的唯一性)
但是我們用的最多的也就是聚簇以及非聚簇了---這兩個(gè)最大的區(qū)別也就是一個(gè)回表一個(gè)不回表
那我們?cè)賮?lái)說(shuō)說(shuō)索引的存儲(chǔ):別的文章已經(jīng)寫的很清楚了,就是一個(gè)B+樹的數(shù)據(jù)結(jié)構(gòu),根節(jié)點(diǎn)存兩個(gè)東西,一個(gè)是索引的值,一個(gè)是主鍵的值,通過(guò)索引找到了信息之后,再來(lái)個(gè)回表操作就可以查到我們想要的數(shù)據(jù)了
我們?cè)賮?lái)說(shuō)說(shuō)我們上面說(shuō)的根節(jié)點(diǎn),根節(jié)點(diǎn)存的是數(shù)據(jù)行信息還是數(shù)據(jù)頁(yè)信息?
計(jì)算機(jī)數(shù)據(jù)都是以頁(yè)來(lái)存儲(chǔ)的,一頁(yè)是4KB,根節(jié)點(diǎn)存的就是數(shù)據(jù)頁(yè)信息,然后在通過(guò)二分法,找到數(shù)據(jù)行信息,再來(lái)回表。
說(shuō)主題,MySQL在一個(gè)表上(這個(gè)表是有數(shù)據(jù)的),如果要新增索引都經(jīng)歷了什么?
個(gè)人分析:首先,一個(gè)表是已經(jīng)建好了的,已經(jīng)有數(shù)據(jù)了,我們知道,新增索引是要新建一個(gè)新的索引的B+樹的數(shù)據(jù)結(jié)構(gòu)的,那么我們新增這個(gè)索引,要先把新增索引的字段數(shù)據(jù)都查出來(lái),然后根據(jù)這字段的數(shù)據(jù)信息再來(lái)構(gòu)建一個(gè)新的B+樹的數(shù)據(jù)結(jié)構(gòu)。
那么是不是新增索引的時(shí)候要經(jīng)過(guò)一下幾步:
1.鎖表
2.查處字段的數(shù)據(jù)信息
3.根據(jù)這個(gè)來(lái)建立一個(gè)新的索引
4.釋放鎖
其實(shí)這個(gè)鎖,加個(gè)讀鎖就ok了,沒有必要加寫鎖。
然后,再分析一下,給一個(gè)表加字段。
是不是跟索引的操作是一樣的呀?就是原理不一樣,這個(gè)原理是操作的回表的時(shí)候回到的主表,對(duì)主表進(jìn)行的操作。原理完全不一樣。但是步驟是一樣的。
然后,再來(lái)說(shuō)說(shuō)刪除索引有什么影響?
根據(jù)上面分析的,刪除就是刪除一個(gè)索引信息,直接刪除就好,啥操作都不需要,直接干就完事。沒有影響。
所以,不要輕易對(duì)大表,線上的表下手。若要下手,網(wǎng)上有對(duì)應(yīng)教程。
總結(jié)
以上是生活随笔為你收集整理的mysql 线上加索引_MySQL加索引都经历了什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 被忽悠办了信用卡怎么办 可以选择直接注销
- 下一篇: phpstudy一直自动停止启动_发动机