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

MySQL有5種索引類型及其特點詳解

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

前言

MySQL(尤其是 InnoDB 引擎)支持多種索引類型,不同索引適用于不同場景。以下是 MySQL 中常見的索引類型及其特點,按邏輯分類物理結構兩個維度說明:

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

1.主鍵索引(Primary Key)

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

2.唯一索引(Unique Index)

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

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

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

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

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

5.前綴索引(Prefix Index)

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

二、按物理結構分類(InnoDB)

1.聚簇索引(Clustered Index)

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

2.二級索引(Secondary Index)

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

三、特殊索引類型(特定場景)

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

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

2.空間索引(SPATIAL Index)

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

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

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

?? InnoDB 的 自適應哈希索引(Adaptive Hash Index, AHI) 是 InnoDB 自動為熱點索引頁構建的內存哈希結構,無需手動創(chuàng)建,可通過 SHOW ENGINE INNODB STATUS 查看。

五、索引設計黃金法則(電商場景重點)

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

六、查看索引命令

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

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

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

? 總結

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

牢記:索引不是越多越好,而是越精準越好。

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

相關文章

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

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

    了解了一些最基本的操作命令后,我們再來學習如何創(chuàng)建一個數(shù)據(jù)庫和數(shù)據(jù)庫表。
    2008-10-10
  • MySQL中的SQL標準語句詳解

    MySQL中的SQL標準語句詳解

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

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

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

    mysql連接過多和死掉以及拒絕服務的解決方法

    mysql連接過多和死掉以及拒絕服務的解決方法...
    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?深度解析及使用詳情,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • MySQL中查詢的進階運用方法實例詳解

    MySQL中查詢的進階運用方法實例詳解

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

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

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

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

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

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

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

最新評論

新野县| 通山县| 祁连县| 平南县| 永泰县| 乌鲁木齐县| 武安市| 合阳县| 榕江县| 东港市| 都兰县| 灌云县| 旬阳县| 和林格尔县| 太仓市| 杭锦后旗| 呼和浩特市| 怀安县| 田阳县| 武强县| 曲水县| 杭锦旗| 大新县| 邮箱| 明水县| 页游| 定陶县| 安国市| 宜昌市| 呈贡县| 宝鸡市| 西昌市| 南城县| 铁力市| 南京市| 玉环县| 枣阳市| 泗阳县| 旌德县| 铁力市| 石楼县|