最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

四大核心維度帶你系統(tǒng)梳理MySQL索引的分類邏輯

 更新時間:2026年02月13日 08:43:07   作者:大黃評測  
在數(shù)據(jù)庫開發(fā)與優(yōu)化中,MySQL?索引是繞不開的核心話題,本文將從四大核心維度系統(tǒng)梳理?MySQL?索引的分類邏輯,幫助你快速構(gòu)建清晰認(rèn)知框架

在數(shù)據(jù)庫開發(fā)與優(yōu)化中,MySQL 索引是繞不開的核心話題。很多開發(fā)者面對“慢查詢”束手無策,其實問題根源往往就在于索引沒建對、沒用好。本文將從四大核心維度系統(tǒng)梳理 MySQL 索引的分類邏輯,幫助你快速構(gòu)建清晰認(rèn)知框架,真正做到“知其然,更知其所以然”,讓查詢優(yōu)化少走 90% 的彎路。

一、按功能特性分類(最貼近業(yè)務(wù)開發(fā))

這是開發(fā)者日常接觸最多的分類方式,直接決定你該為哪些字段建哪種索引。

1. 主鍵索引(Primary Key Index)

特點:唯一、非空、每表僅一個;自動創(chuàng)建聚簇索引(InnoDB)。

作用:唯一標(biāo)識每一行記錄。

示例

CREATE TABLE user (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50),
  PRIMARY KEY (id)
);

2. 唯一索引(Unique Index)

特點:值唯一(允許多個 NULL),可多個;用于業(yè)務(wù)唯一性約束。

適用場景:手機號、郵箱等需去重但非主鍵的字段。

示例

CREATE UNIQUE INDEX idx_user_phone ON user(phone);

3. 普通索引(Normal/Index)

特點:無約束,僅加速查詢;最常用。

適用場景:經(jīng)常出現(xiàn)在 WHERE、JOIN、ORDER BY 中的字段。

示例

CREATE INDEX idx_user_name ON user(name);

4. 全文索引(Full-Text Index)

特點:支持 MATCH ... AGAINST 全文檢索;適用于 CHAR/VARCHAR/TEXT

注意LIKE '%關(guān)鍵詞%' 無法使用 B+Tree 索引,此時全文索引是唯一解。

示例

CREATE FULLTEXT INDEX idx_article_content ON article(content);

5. 組合索引(Composite / 聯(lián)合索引)

特點:多個字段組成一個索引;遵循最左前綴原則。

優(yōu)勢:減少索引數(shù)量,提升多條件查詢效率。

示例

CREATE INDEX idx_user_age_name ON user(age, name);
-- 可加速 WHERE age=25 AND name='張三'
-- 也可加速 WHERE age=25(但不能加速僅 WHERE name='張三')

二、按底層數(shù)據(jù)結(jié)構(gòu)分類(決定性能本質(zhì))

索引的本質(zhì)是數(shù)據(jù)結(jié)構(gòu),不同結(jié)構(gòu)適合不同查詢模式。

1. B+Tree 索引(默認(rèn)且最主流)

引擎支持:InnoDB、MyISAM 默認(rèn)使用。

優(yōu)勢

  • 支持范圍查詢(>, <, BETWEEN
  • 支持排序(ORDER BY
  • 磁盤 IO 少,查詢穩(wěn)定高效

適用場景:90% 以上的業(yè)務(wù)查詢。

2. Hash 索引

引擎限制:Memory 引擎原生支持;InnoDB 有自適應(yīng) Hash 索引(不可手動創(chuàng)建)。

優(yōu)勢:等值查詢(=、IN)極快,O(1) 時間復(fù)雜度。

劣勢

  • 不支持范圍、排序、模糊查詢
  • 哈希沖突時性能驟降

適用場景:內(nèi)存表中的精確匹配高頻查詢。

3. 空間索引(R-Tree)

  • 支持類型POINTLINESTRING、POLYGON 等地理數(shù)據(jù)。
  • 引擎支持:MyISAM、InnoDB(5.7+)。
  • 用途:GIS 應(yīng)用,如“附近 5 公里內(nèi)的商家”。

4. 全文索引(倒排索引結(jié)構(gòu))

  • 底層:基于分詞的倒排索引(類似搜索引擎)。
  • 注意:與 B+Tree 全文索引不同,需用 MATCH ... AGAINST 語法。

三、按物理存儲方式分類(影響 I/O 效率)

1. 聚簇索引(Clustered Index)

  • 特點索引即數(shù)據(jù),葉子節(jié)點直接存儲整行數(shù)據(jù)。
  • InnoDB 規(guī)則:主鍵索引 = 聚簇索引;若無主鍵,InnoDB 自動生成隱藏聚簇索引。
  • 優(yōu)勢:主鍵查詢只需一次 I/O。
  • 注意:一張表只能有一個聚簇索引。

2. 非聚簇索引(Secondary Index / 二級索引)

  • 特點:葉子節(jié)點存儲的是主鍵值(InnoDB)或行指針(MyISAM)。
  • 查詢過程:先查二級索引 → 再回表查聚簇索引(“回表查詢”)。
  • 優(yōu)化建議:盡量使用覆蓋索引(SELECT 字段都在索引中),避免回表。

四、按字段數(shù)量分類(設(shè)計索引時的關(guān)鍵考量)

類型說明注意事項
單列索引僅包含一個字段簡單直接,但可能冗余
組合索引包含 2~16 個字段(InnoDB 最多 16 列)遵循最左前綴,合理排序字段順序可大幅提升復(fù)用率

最佳實踐:將區(qū)分度高、查詢頻率高的字段放組合索引左側(cè)。

總結(jié):如何科學(xué)建索引?

  • 主鍵必設(shè):使用自增整數(shù)主鍵,避免隨機 UUID 導(dǎo)致頁分 裂。
  • 高頻查詢字段加普通索引:如狀態(tài)、類型、時間等。
  • 唯一性字段用唯一索引:如手機號、訂單號。
  • 多條件查詢優(yōu)先考慮組合索引:避免建多個單列索引。
  • 警惕索引失效:函數(shù)操作、隱式類型轉(zhuǎn)換、OR 條件不當(dāng)?shù)榷紩?dǎo)致索引失效。
  • 定期分析慢查詢?nèi)罩?/strong>:用 EXPLAIN 查看執(zhí)行計劃,驗證索引是否生效。

到此這篇關(guān)于四大核心維度帶你系統(tǒng)梳理MySQL索引的分類邏輯的文章就介紹到這了,更多相關(guān)MySQL索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

枣庄市| 卢湾区| 洛南县| 东乡族自治县| 湘阴县| 雅安市| 遵义市| 平昌县| 宜阳县| 宿州市| 新沂市| 东台市| 聂荣县| 丹阳市| 巴青县| 木兰县| 塘沽区| 海门市| 大关县| 扎鲁特旗| 民乐县| 芜湖县| 昭觉县| 静乐县| 旬阳县| 盐边县| 舒兰市| 商南县| 化隆| 闽清县| 拉萨市| 铜山县| 祁门县| 岳阳县| 石渠县| 河北区| 肇源县| 灯塔市| 镶黄旗| 永城市| 武隆县|