久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL優(yōu)化中B樹索引知識點(diǎn)總結(jié)

144次閱讀
沒有評論

共計(jì) 1602 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。

自動(dòng)寫代碼機(jī)器人,免費(fèi)開通

為什么要進(jìn)行 SQL 優(yōu)化呢?很顯然,當(dāng)我們?nèi)?sql 語句時(shí):

1 會(huì)發(fā)現(xiàn)性能低
2. 執(zhí)行時(shí)間太長,
3. 或等待時(shí)間太長
4.sql 語句欠佳,以及我們索引失效
5. 服務(wù)器參數(shù)設(shè)置不合理

SQL 語句執(zhí)行過程分析

1. 編寫過程:

編寫過程就是我們平常寫 sql 語句的過程,也可以理解為編寫順序,以下就是我們編寫順序:

select from join on where 條件 group by 分組 having 過濾組 order by 排序 limit 限制查詢個(gè)數(shù)

我們雖然是這樣去寫的,但是它 mysql 的引擎去解析時(shí),并不是依照我們以上編寫的這樣的順序;

它并不是先解析 select 而是先解析 from,也就說,我們的解析過程跟編寫過程是不一致的,所以我們看下發(fā)的解析順序

2. 解析過程:

from on join where group by having select order by limit 

以上就是 mysql 的解析過程,我們發(fā)現(xiàn),跟我們編寫的過程完全不一致!

索引

什么是索引 (index)?簡單的來講就是書的目錄;

比如說我現(xiàn)在要通過字典來查“王”這個(gè)字,如果你在沒有目錄的情況下去找“王”這個(gè)字,你就需要把這個(gè)字典從頭到尾的翻一遍,如果有一千頁,你就必須一頁一頁的去翻,直到找到為止;

索引就相當(dāng)于目錄,查這個(gè)“王”之前先去翻看目錄,發(fā)現(xiàn)“W”在 300 頁,因?yàn)橥跏鬃帜甘恰癢”,我們直接去在 300 頁中找,這樣找起來就非常快;

索引在數(shù)據(jù)庫中是關(guān)鍵字 insex, 用官方的定義的意思來說,索引就是幫助 MySQL 快速高效的獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu);

索引是一個(gè)數(shù)據(jù)結(jié)構(gòu),它是一個(gè)為了高效查詢數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu);

那它到底是什么數(shù)據(jù)結(jié)構(gòu)呢?

其實(shí)它就是一個(gè)樹,我們用的比較多的就是 B 樹、Hash 樹,在 MySQL 里面,用的就是 B 樹索引;

B 樹索引

首先我畫一個(gè)圖,假裝這個(gè)是數(shù)據(jù)表,并且給 age 列加一個(gè)索引:

MySQL 優(yōu)化中 B 樹索引知識點(diǎn)總結(jié)

就把這個(gè)索引當(dāng)成一個(gè)目錄,也就是 age 為 50 的,就指向第一行,age 為 33 的,指向第五行;

下面我會(huì)將 B 樹索引畫出來,看看到底是怎么索引了:

MySQL 優(yōu)化中 B 樹索引知識點(diǎn)總結(jié)

我們給 age 加了索引列后,它就會(huì)像樹一樣,把小的放到左邊,把大的放到右邊,第一列為 50,比 50 小的在左邊,23,比 23 小的繼續(xù)向左排列,

33 比 23 大,就向左排列 20 比 22 小就在 22 后面繼續(xù)向左排列,以此類推!

比如我們現(xiàn)在需要查 33:

select * From 表名 where age = 33;

不加索引的話,就會(huì)從 50 開始查,50 不是 23,不是 22 不是 ….,不加索引就一個(gè)個(gè)去找;

如果加索引的話,找 33,發(fā)現(xiàn) 33 比 50 小,第一次,再去找 23,第二次,33 比 23 大,第三次,僅需三次就查到了:

MySQL 優(yōu)化中 B 樹索引知識點(diǎn)總結(jié)

索引的弊端

1. 索引本身很占空間,可以存放在內(nèi)存 / 硬盤(通常)

2. 索引不是所有情況均可適用比如:少量數(shù)據(jù)、頻繁更新的字段(如果數(shù)據(jù)表中的某一列經(jīng)常會(huì)發(fā)生改變,那么這一列就不適合做索引)

3. 索引確實(shí)可以提高查詢效率,但是同時(shí)會(huì)降低增刪改的效率,比如:

我們沒有索引,你改 44,改成 45,很好改,直接改就行了,如果你有索引,我不光要改表里面的 44,我需要把 B 樹里面的 44 也要改:

MySQL 優(yōu)化中 B 樹索引知識點(diǎn)總結(jié)

有些人就覺得不劃算了,提升一個(gè)降低三個(gè),這樣就很不劃算了,其實(shí)很劃算的!

因?yàn)槲覀兇蟛糠智闆r下都是在查詢,增刪改很少,因?yàn)椴樵冇绊懶阅芎艽蟮模苑浅S斜匾褂盟?

索引的優(yōu)勢

1. 提高了查詢效率

客戶端到服務(wù)端,鏈接服務(wù)端是通過 IO,通過輸入輸出流,所以說,提高查詢效率就是降低了 IO 的使用率

2. 降低 CPU 使用率

比如說我 sql 里面有一個(gè) order by desc 根據(jù)年齡降序或升序,如果沒有索引,你需要把 age 全部拿出來全部排個(gè)序,但是如果有了索引,你就不需要排序了,B 樹本身就是一個(gè)排好序的結(jié)構(gòu),最左邊必然是最小的,最最右邊必然是最大的:

MySQL 優(yōu)化中 B 樹索引知識點(diǎn)總結(jié)

只需要根據(jù)一定的規(guī)則遍歷出來就行了。

以上就是相關(guān)的 B 數(shù)索引的相關(guān)知識點(diǎn),感謝大家的閱讀和對丸趣 TV 的支持。

向 AI 問一下細(xì)節(jié)

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-18發(fā)表,共計(jì)1602字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 安庆市| 寻乌县| 永川市| 宜丰县| 江城| 大兴区| 泸州市| 织金县| 昭平县| 兰考县| 高雄县| 岗巴县| 洛扎县| 澄江县| 井研县| 广汉市| 敖汉旗| 鹤壁市| 招远市| 宜章县| 西吉县| 南阳市| 茶陵县| 乌兰浩特市| 镇远县| 吉木乃县| 仙游县| 寿光市| 梁河县| 新竹市| 青川县| 宜兰市| 舒城县| 大足县| 闸北区| 白河县| 容城县| 高清| 海兴县| 新营市| 正阳县|