廣州網(wǎng)站營(yíng)銷優(yōu)化開發(fā)請(qǐng)輸入搜索關(guān)鍵詞
作者簡(jiǎn)介
前言
博主之前寫過一個(gè)MySQL的系列,從基礎(chǔ)概念、SQL到底層原理、優(yōu)化,專欄地址:
https://blog.csdn.net/joker_zjn/category_12305262.html?spm=1001.2014.3001.5482
本文會(huì)是這個(gè)系列的清單,拉通來聊一聊Mysql從基礎(chǔ)概念一直到優(yōu)化的相關(guān)內(nèi)容。
目錄
目錄
1.基礎(chǔ)概念和SQL
2.SQL調(diào)優(yōu)
3.優(yōu)化索引
4.一些工程問題
1.基礎(chǔ)概念和SQL
文章鏈接:
MySQL基礎(chǔ)概念和SQL__BugMan的博客-CSDN博客
這一部分會(huì)聊一下MySQL的基礎(chǔ)概念和SQL操作,主要包含以下內(nèi)容:
- 什么是MySQL
- 關(guān)系型、非關(guān)系型數(shù)據(jù)庫區(qū)別
- MySQL的架構(gòu)
- MySQL的一些基礎(chǔ)概念
- MySQL的數(shù)據(jù)類型
- MySQL的SQL
1.什么是MySQL
開源、輕量級(jí)的一款關(guān)系型數(shù)據(jù)庫,在業(yè)內(nèi)有著廣泛應(yīng)用。
2.關(guān)系型、非關(guān)系型數(shù)據(jù)庫的區(qū)別
其實(shí)就是數(shù)據(jù)組織方式的不同,關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)有嚴(yán)格的格式約束,而非關(guān)系型數(shù)據(jù)庫里沒有。
3.MySQL的架構(gòu)
MySQL的邏輯架構(gòu)由三層組成,一個(gè)MySQL實(shí)例中可以有多個(gè)庫,一個(gè)庫里面可以有多張表,一張表里面可以有多個(gè)字段。
4.MySQL的一些基礎(chǔ)概念
主要就是要搞清楚,什么是主鍵?什么是外鍵?什么是索引?
5.MySQL的數(shù)據(jù)類型
MySQL下設(shè)三大類的數(shù)據(jù)類型:數(shù)值、字符串、日期/時(shí)間,三大類型中會(huì)各自包含具體的小類型,比如數(shù)值中會(huì)包含BIGINT、FLOAT、DOUBLE等,字符串中會(huì)包含CHAR、VARCHAR等。
6.SQL
SQL上重要的內(nèi)容主要分為兩個(gè)方面:
- 操作表和庫,包含創(chuàng)建、刪除、調(diào)整結(jié)構(gòu)等
- 操作數(shù)據(jù),包含對(duì)數(shù)據(jù)的增加、刪除、修改、查詢
2.SQL調(diào)優(yōu)
文章鏈接:
詳解MySQL索引失效_mysql復(fù)合索引失效__BugMan的博客-CSDN博客
當(dāng)MySQL在實(shí)際生產(chǎn)環(huán)境中,數(shù)據(jù)量堆積到一定量級(jí)后原來的一些查詢SQL的速度會(huì)變慢,這時(shí)候就需要對(duì)原來的SQL進(jìn)行調(diào)優(yōu),使得其速度能夠重新起來。SQL調(diào)優(yōu)也是數(shù)據(jù)庫優(yōu)化的一個(gè)核心點(diǎn)。SQL調(diào)優(yōu)的核心其實(shí)就是建出合理的索引,用空間換時(shí)間。
這一部分包含:
- B樹、B+樹
- 哪些情況索引會(huì)失效
1.B樹、B+樹
B樹是一種常見的自平衡樹數(shù)據(jù)結(jié)構(gòu),廣泛用于數(shù)據(jù)庫系統(tǒng)和文件系統(tǒng)等需要高效插入、刪除和查找操作的應(yīng)用中。因?yàn)镸ySQL是將數(shù)據(jù)存在磁盤上的,如果查找的層級(jí)很多的話,意味著尋道、磁頭的機(jī)械動(dòng)作就會(huì)出現(xiàn)多次,這無疑是很耗時(shí)的,所以如果查找的層級(jí)少的話,會(huì)有很不錯(cuò)的效率。B樹就是一種層級(jí)很少,但是能存海量數(shù)據(jù)的樹形結(jié)構(gòu)。文中會(huì)對(duì)B樹的數(shù)據(jù)結(jié)構(gòu)、完整的建樹過程、存儲(chǔ)數(shù)據(jù)的容量給出詳述,以及對(duì)B樹的優(yōu)化結(jié)構(gòu)B+樹給出介紹。
2.哪些情況索引會(huì)失效
其實(shí)索引會(huì)失效的根本原因就是違反了B樹的數(shù)據(jù)結(jié)構(gòu),讓精準(zhǔn)匹配無法走下去了。文章中將會(huì)對(duì)以下幾類常見的索引失效的情況做出詳細(xì)介紹:
- 沒有用到索引
- 違反左前綴原則
- 范圍查詢斷索引
- like需要分情況
- 結(jié)果數(shù)據(jù)超過半數(shù)
3.優(yōu)化索引
文章鏈接:
詳解MySQL覆蓋索引、索引下推__BugMan的博客-CSDN博客
SQL調(diào)優(yōu),只是建了合適的索引,但是有時(shí)候索引機(jī)制自身也是需要優(yōu)化的,這一部分會(huì)圍繞如何優(yōu)化索引機(jī)制來聊一聊,包含:
- 覆蓋索引
- 索引下推
1.覆蓋索引
MySQL天生自帶“回表查詢”問題,覆蓋索引,是為了避免“回表查詢”,從而降低查詢耗時(shí)的一種使用索引的方法。文章中會(huì)詳細(xì)講述什么是“回表查詢”以及如何使用覆蓋索引來解決回表問題。
2.索引下推
索引下推,是自MySQL5.6版本引入的一個(gè)新特性,目的也是減少“回表查詢”,從而提升整體的查詢效率。文中會(huì)詳細(xì)聊一下什么是索引下推,如何解決的回表問題。
4.一些工程問題
文章鏈接:
數(shù)據(jù)庫如何合理生成主鍵:UUID、雪花算法_主鍵算法__BugMan的博客-CSDN博客
實(shí)際工程中如何合理生成數(shù)據(jù)庫主鍵是個(gè)問題。首先在實(shí)際工程中我們很少用1,2,3......這樣的自增主鍵,比如我要跨數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步、或者在分布式系統(tǒng)中跨“分區(qū)”進(jìn)行數(shù)據(jù)同步,不難想象,1,2,3......這種遞增的單數(shù)字是極容易產(chǎn)生沖突的。文章中將會(huì)詳細(xì)介紹主鍵的一些生成算法,比如UUID、雪花算法等。