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