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

MySQL有5種索引類(lèi)型及其特點(diǎn)詳解

 更新時(shí)間:2026年01月15日 09:46:50   作者:曠野說(shuō)  
MySQL中的索引類(lèi)型多種多樣,每種索引類(lèi)型都有其特定的使用場(chǎng)景和優(yōu)勢(shì),這篇文章主要介紹了MySQL有5種索引類(lèi)型及其特點(diǎn)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

MySQL(尤其是 InnoDB 引擎)支持多種索引類(lèi)型,不同索引適用于不同場(chǎng)景。以下是 MySQL 中常見(jiàn)的索引類(lèi)型及其特點(diǎn),按邏輯分類(lèi)物理結(jié)構(gòu)兩個(gè)維度說(shuō)明:

一、按邏輯用途分類(lèi)(常用)

1.主鍵索引(Primary Key)

  • 唯一且非空,一張表只能有一個(gè)。
  • InnoDB 中,主鍵索引就是 聚簇索引(Clustered Index):數(shù)據(jù)行與索引存儲(chǔ)在一起。
  • 選擇原則:盡量使用自增整數(shù)(避免頁(yè)分裂),避免使用 UUID(隨機(jī)寫(xiě)性能差)。

2.唯一索引(Unique Index)

  • 索引列的值必須唯一,但允許有 NULL(多個(gè) NULL 不沖突)。
  • 適用于:手機(jī)號(hào)、訂單號(hào)、用戶 ID 等業(yè)務(wù)唯一字段。
  • 創(chuàng)建方式:
    CREATE UNIQUE INDEX idx_user_phone ON users(phone);
    

3.普通索引(Secondary Index / Normal Index)

  • 最基礎(chǔ)的索引類(lèi)型,允許重復(fù)值、允許 NULL。
  • 用于加速 WHERE、JOIN、ORDER BY 等查詢。
  • 示例:
    CREATE INDEX idx_order_status ON orders(status);
    

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

  • 對(duì)多個(gè)列創(chuàng)建一個(gè)索引,如 (col1, col2, col3)。
  • 遵循 最左前綴原則(Leftmost Prefix Rule)
    • 查詢條件必須從最左列開(kāi)始,才能命中索引。
    • 例如:索引 (a, b, c) 可用于 WHERE a=1、WHERE a=1 AND b=2,但不能用于 WHERE b=2。
  • 建議:把區(qū)分度高(選擇性好)的列放前面。

5.前綴索引(Prefix Index)

  • 對(duì)長(zhǎng)字符串字段(如 VARCHAR(255))只索引前 N 個(gè)字符。
  • 減少索引大小,提升性能。
  • 示例:
    CREATE INDEX idx_email_prefix ON users(email(20)); -- 只索引前20字符
    
  • ?? 注意:前綴長(zhǎng)度需通過(guò) SELECT COUNT(DISTINCT LEFT(email, N)) / COUNT(*) 估算區(qū)分度。

二、按物理結(jié)構(gòu)分類(lèi)(InnoDB)

1.聚簇索引(Clustered Index)

  • 數(shù)據(jù)即索引:葉子節(jié)點(diǎn)存儲(chǔ)完整的數(shù)據(jù)行。
  • InnoDB 自動(dòng)使用主鍵作為聚簇索引;若無(wú)主鍵,則選擇第一個(gè)唯一非空索引;否則用隱藏的 row_id
  • 優(yōu)點(diǎn):主鍵查詢極快(一次 I/O)。
  • 缺點(diǎn):二級(jí)索引需“回表”(先查二級(jí)索引 → 再查聚簇索引)。

2.二級(jí)索引(Secondary Index)

  • 葉子節(jié)點(diǎn)存儲(chǔ)的是主鍵值,不是完整數(shù)據(jù)。
  • 查詢流程:二級(jí)索引 → 主鍵值 → 聚簇索引 → 獲取數(shù)據(jù)(回表)。
  • 優(yōu)化回表:使用 覆蓋索引(Covering Index),即查詢字段全部包含在索引中,無(wú)需回表。

三、特殊索引類(lèi)型(特定場(chǎng)景)

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

  • 用于 TEXTVARCHAR 字段的全文搜索(如文章內(nèi)容搜索)。
  • 支持 MATCH() AGAINST 語(yǔ)法。
  • InnoDB 從 MySQL 5.6 開(kāi)始支持。
  • 示例:
    CREATE FULLTEXT INDEX idx_content ON articles(content);
    SELECT * FROM articles WHERE MATCH(content) AGAINST('數(shù)據(jù)庫(kù)');
    
  • ?? 不適用于電商商品名等短文本(用 ES 更合適)。

2.空間索引(SPATIAL Index)

  • 用于 GEOMETRY 類(lèi)型字段(如地圖坐標(biāo)、區(qū)域)。
  • 僅 MyISAM 和 InnoDB(MySQL 5.7+)支持。
  • 使用 R-TREE 結(jié)構(gòu),支持 ST_Contains() 等空間函數(shù)。

四、不推薦或已廢棄的索引

索引類(lèi)型說(shuō)明
HASH 索引Memory 引擎支持,InnoDB 不支持(但自適應(yīng)哈希索引 AHI 是內(nèi)部?jī)?yōu)化)
RTREE 索引舊版 MyISAM 用,現(xiàn)已被 SPATIAL 取代

?? InnoDB 的 自適應(yīng)哈希索引(Adaptive Hash Index, AHI) 是 InnoDB 自動(dòng)為熱點(diǎn)索引頁(yè)構(gòu)建的內(nèi)存哈希結(jié)構(gòu),無(wú)需手動(dòng)創(chuàng)建,可通過(guò) SHOW ENGINE INNODB STATUS 查看。

五、索引設(shè)計(jì)黃金法則(電商場(chǎng)景重點(diǎn))

  1. 主鍵自增:避免 UUID 導(dǎo)致聚簇索引頻繁頁(yè)分裂。
  2. 組合索引合理排序:高頻過(guò)濾字段放前,范圍查詢字段放后(如 (user_id, create_time))。
  3. 避免冗余索引(a,b)(a) 同時(shí)存在是冗余的。
  4. 大字段慎建索引:如 description 字段,優(yōu)先考慮前綴索引或異構(gòu)存儲(chǔ)(如 Elasticsearch)。
  5. 監(jiān)控慢查詢:用 EXPLAIN 分析是否命中索引,關(guān)注 type(最好 ref/range,避免 ALL)。

六、查看索引命令

-- 查看表索引
SHOW INDEX FROM table_name;

-- 查看執(zhí)行計(jì)劃
EXPLAIN SELECT * FROM orders WHERE user_id = 100;

-- 查看索引使用統(tǒng)計(jì)(MySQL 8.0+)
SELECT * FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE object_schema = 'your_db' AND object_name = 'your_table';

? 總結(jié)

在電商開(kāi)發(fā)中,主鍵索引 + 唯一索引 + 合理的組合索引 足以覆蓋 95% 場(chǎng)景。

牢記:索引不是越多越好,而是越精準(zhǔn)越好。

到此這篇關(guān)于MySQL有5種索引類(lèi)型及其特點(diǎn)的文章就介紹到這了,更多相關(guān)MySQL索引類(lèi)型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用MySQL創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表代碼

    用MySQL創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表代碼

    了解了一些最基本的操作命令后,我們?cè)賮?lái)學(xué)習(xí)如何創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表。
    2008-10-10
  • MySQL中的SQL標(biāo)準(zhǔn)語(yǔ)句詳解

    MySQL中的SQL標(biāo)準(zhǔn)語(yǔ)句詳解

    SQL(Structured?Query?Language)是“結(jié)構(gòu)化查詢語(yǔ)言”,它是對(duì)關(guān)系型數(shù)據(jù)庫(kù)的操作語(yǔ)言。雖然SQL可以用在所有關(guān)系型數(shù)據(jù)庫(kù)中,但很多數(shù)據(jù)庫(kù)還都有標(biāo)準(zhǔn)之后的一些語(yǔ)法,我們可以稱之為方言
    2022-09-09
  • MySQL觸發(fā)器自動(dòng)智能化的數(shù)據(jù)維護(hù)

    MySQL觸發(fā)器自動(dòng)智能化的數(shù)據(jù)維護(hù)

    這篇文章主要介紹了MySQL觸發(fā)器自動(dòng)智能化的數(shù)據(jù)維護(hù),觸發(fā)器,就是一種特殊的存儲(chǔ)過(guò)程。觸發(fā)器和存儲(chǔ)過(guò)程一樣是一個(gè)能夠完成特定功能、存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上的SQL片段
    2022-07-07
  • mysql連接過(guò)多和死掉以及拒絕服務(wù)的解決方法

    mysql連接過(guò)多和死掉以及拒絕服務(wù)的解決方法

    mysql連接過(guò)多和死掉以及拒絕服務(wù)的解決方法...
    2007-12-12
  • mysql 5.7.17 winx64安裝配置圖文教程

    mysql 5.7.17 winx64安裝配置圖文教程

    這篇文章主要為大家分享了mysql 5.7.17 winx64安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2017-01-01
  • MySQL中的?Binlog?深度解析及使用詳情

    MySQL中的?Binlog?深度解析及使用詳情

    這篇文章主要介紹了MySQL中的?Binlog?深度解析及使用詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • MySQL中查詢的進(jìn)階運(yùn)用方法實(shí)例詳解

    MySQL中查詢的進(jìn)階運(yùn)用方法實(shí)例詳解

    MySQL數(shù)據(jù)庫(kù)查詢語(yǔ)句是數(shù)據(jù)庫(kù)操作中非常關(guān)鍵的一部分,它允許用戶從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù),下面這篇文章主要介紹了MySQL中查詢進(jìn)階運(yùn)用的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-04-04
  • MySQL安全模式下創(chuàng)建賬號(hào)的操作指南

    MySQL安全模式下創(chuàng)建賬號(hào)的操作指南

    MySQL 的安全模式通常指在跳過(guò)權(quán)限驗(yàn)證或限制特定功能的狀態(tài)下啟動(dòng)數(shù)據(jù)庫(kù),常用于管理員密碼遺忘、權(quán)限損壞等緊急維護(hù)場(chǎng)景,本文給大家介紹了如何在MySQL安全模式下創(chuàng)建賬號(hào),需要的朋友可以參考下
    2026-05-05
  • Windows環(huán)境下MySQL主從復(fù)制搭建全步驟(超詳細(xì)實(shí)操版)

    Windows環(huán)境下MySQL主從復(fù)制搭建全步驟(超詳細(xì)實(shí)操版)

    MySQL支持主數(shù)據(jù)庫(kù)與從數(shù)據(jù)配置,采用此配置的數(shù)據(jù)庫(kù),MySQL會(huì)自動(dòng)將主數(shù)據(jù)庫(kù)中的數(shù)據(jù)同步到從數(shù)據(jù)庫(kù)中,這篇文章主要介紹了Windows環(huán)境下MySQL主從復(fù)制搭建詳細(xì)實(shí)操的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • MySQL8.0.21安裝步驟及出現(xiàn)問(wèn)題解決方案

    MySQL8.0.21安裝步驟及出現(xiàn)問(wèn)題解決方案

    這篇文章主要介紹了MySQL8.0.21安裝步驟及出現(xiàn)問(wèn)題解決方案,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論

班戈县| 宣汉县| 吉林省| 穆棱市| 镇雄县| 瑞丽市| 眉山市| 龙州县| 泗洪县| 乌鲁木齐县| 江阴市| 苏尼特左旗| 香格里拉县| 宁津县| 盘锦市| 西畴县| 建宁县| 安阳市| 扶绥县| 榕江县| 台湾省| 谷城县| 苗栗市| 塘沽区| 江都市| 六盘水市| 南溪县| 上高县| 名山县| 双桥区| 宁晋县| 定边县| 无锡市| 金乡县| 木兰县| 夏邑县| 徐水县| 华阴市| 淳化县| 榆树市| 五常市|