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

MySQL索引的完整教程(創(chuàng)建、查看、修改、刪除與日常管理)

 更新時間:2026年07月03日 09:08:20   作者:detayun  
想提升數(shù)據(jù)庫查詢性能,別再讓慢SQL拖垮業(yè)務?本文手把手教你MySQL索引創(chuàng)建、查看與管理技巧,重點解析如何避免索引失效、清理冗余索引,幫你快速掌握B+樹優(yōu)化核心,讓查詢速度翻倍,需要的朋友可以參考下

一、索引基礎說明

InnoDB 支持:主鍵索引、普通索引、唯一索引、聯(lián)合復合索引、前綴索引、全文索引;
索引核心作用:加速 WHERE / JOIN / ORDER BY / GROUP BY 查詢;
代價:插入、更新、刪除時需要維護 B+ 樹,索引越多寫入性能越差。

二、創(chuàng)建索引三種方式

方式1:建表時直接定義索引(推薦規(guī)范寫法)

CREATE TABLE `openapi_apilog` (
  id BIGINT AUTO_INCREMENT COMMENT '主鍵',
  user_id VARCHAR(32) NOT NULL,
  date DATE NOT NULL,
  path VARCHAR(500) NOT NULL,
  login_ip VARCHAR(50),
  price DECIMAL(10,2),
  creat_time DATETIME,
  -- 主鍵索引
  PRIMARY KEY (`id`),
  -- 普通聯(lián)合索引
  INDEX idx_user_date (user_id, date),
  -- 唯一索引
  UNIQUE INDEX uk_path_uid (path, user_id),
  -- 字符串前綴索引(path只截取前40字符建索引,節(jié)省空間)
  INDEX idx_path_prefix (path(40))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '接口日志表';

各類索引在建表時關鍵字區(qū)分

  1. PRIMARY KEY:主鍵索引,一張表只能一個,非空且唯一;
  2. INDEX / KEY:普通索引,無唯一性限制;
  3. UNIQUE INDEX:唯一索引,字段值不能重復,允許一條 NULL;
  4. path(N):前綴索引,長字符串專用。

方式2:已有表追加創(chuàng)建索引(線上最常用)

語法通用:

CREATE [UNIQUE] INDEX 索引名 ON 表名(字段1, 字段2...);

1)普通單列索引

CREATE INDEX idx_user_id ON openapi_apilog(user_id);

2)聯(lián)合復合索引(多字段組合)

CREATE INDEX idx_user_date_path ON openapi_apilog(user_id, date, path);

3)唯一索引

CREATE UNIQUE INDEX uk_verify_id ON openapi_apilog(verify_idf_id);

4)前綴索引(長URL、地址字段)

CREATE INDEX idx_path_prefix ON openapi_apilog(path(40));

5)覆蓋索引(查詢字段全部放進索引,消除回表)

CREATE INDEX idx_cover ON openapi_apilog(user_id, date, path, login_ip, price, creat_time);

方式3:ALTER TABLE 語句創(chuàng)建索引

底層和 CREATE INDEX 效果一致,兼容老版本:

-- 普通索引
ALTER TABLE openapi_apilog ADD INDEX idx_date (date);

-- 唯一索引
ALTER TABLE openapi_apilog ADD UNIQUE INDEX uk_ip (login_ip);

-- 主鍵索引(表無主鍵時添加)
ALTER TABLE openapi_apilog ADD PRIMARY KEY (`id`);

三、查看索引(管理必備命令)

1. SHOW INDEX FROM 表名(最常用)

SHOW INDEX FROM openapi_apilog;

關鍵字段解讀:

  • Key_name:索引名稱;
  • Seq_in_index:聯(lián)合索引內(nèi)字段順序;
  • Column_name:索引字段;
  • Non_unique:0=唯一索引/主鍵,1=普通索引;
  • Cardinality:基數(shù),代表區(qū)分度,數(shù)值越大索引效率越高。

2. DESCRIBE / DESC 查看表結構附帶索引

DESC openapi_apilog;

3. 查詢系統(tǒng)表,查看全庫索引

SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME, NON_UNIQUE
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX;

4. 查詢從未使用過的閑置索引(清理冗余用)

SELECT * FROM sys.schema_unused_indexes;

5. EXPLAIN 驗證索引是否生效

EXPLAIN 
SELECT login_ip,price FROM openapi_apilog 
WHERE user_id='10001' AND date='2026-07-02';
  • type = ALL:全表掃描,未走索引;
  • key 列有索引名:成功命中索引;
  • Extra 出現(xiàn) Using index:命中覆蓋索引,無回表。

四、修改索引

MySQL 不支持直接修改索引字段,只能先刪除舊索引,再重建新索引。

示例:原有 idx_user_date,需要改成 user_id + date + creat_time

-- 1. 刪除舊索引
DROP INDEX idx_user_date ON openapi_apilog;
-- 2. 創(chuàng)建新索引
CREATE INDEX idx_user_date_time ON openapi_apilog(user_id, date, creat_time);

五、刪除索引

方式1:DROP INDEX(推薦)

DROP INDEX idx_path_prefix ON openapi_apilog;

方式2:ALTER TABLE 刪除索引

ALTER TABLE openapi_apilog DROP INDEX idx_user_date_path;

刪除主鍵特殊寫法

ALTER TABLE openapi_apilog DROP PRIMARY KEY;

注意:如果主鍵是自增字段,刪除前必須先去掉 AUTO_INCREMENT。

六、索引日常管理規(guī)范與運維操作

1. 建索引線上注意事項

1)大表千萬不要直接在線執(zhí)行 CREATE INDEX
500萬行以上表新建索引會鎖表阻塞讀寫,解決方案:

  • MySQL5.6+ 支持在線無鎖創(chuàng)建:ALTER TABLE ... ADD INDEX LOCK=NONE;
  • 使用 pt-online-schema-change 工具在線加索引,避免鎖表;
  • 業(yè)務低峰期凌晨執(zhí)行。

2. 清理冗余索引規(guī)則

已有聯(lián)合索引 (a,b,c),無需單獨創(chuàng)建 (a)(a,b) 單列索引,聯(lián)合索引天然支持最左前綴查詢,多余索引只會加重寫入壓力。

3. 索引碎片整理

大量 DELETE / UPDATE 會產(chǎn)生索引碎片,降低查詢效率:

OPTIMIZE TABLE openapi_apilog;

InnoDB 會重建表和索引,釋放碎片空間。

4. 索引數(shù)量控制

單表索引建議不超過 5 個,INSERT / UPDATE / DELETE 時每條索引都要同步更新。

5. 區(qū)分度判斷(建索引前校驗)

-- 區(qū)分度越接近1,索引效果越好
SELECT COUNT(DISTINCT user_id)/COUNT(*) FROM openapi_apilog;

區(qū)分度低于0.1(如status 0/1狀態(tài))不建議單獨建索引。

七、常見索引管理踩坑

  1. 索引字段加函數(shù)、后置模糊匹配 %xxx、隱式類型轉(zhuǎn)換 → 索引失效;
  2. 聯(lián)合索引順序錯誤,范圍字段放前面,后面字段無法利用索引;
  3. 長字符串不加前綴索引,索引文件體積過大,緩存命中率低;
  4. 線上大表直接創(chuàng)建索引,長時間鎖表引發(fā)業(yè)務超時;
  5. 大量冗余索引,寫入接口TPS持續(xù)下跌。

八、完整操作流程總結

  1. 建表階段:按需定義主鍵、聯(lián)合索引;
  2. 后期新增:CREATE INDEX / ALTER TABLE ADD INDEX;
  3. 查看校驗:SHOW INDEX + EXPLAIN 確認是否命中;
  4. 調(diào)整索引:先 DROP 再 CREATE;
  5. 清理維護:刪除無用索引、定期 OPTIMIZE 整理碎片;
  6. 線上大表操作:使用在線DDL工具避免鎖表。

以上就是MySQL索引的完整教程(創(chuàng)建、查看、修改、刪除與日常管理)的詳細內(nèi)容,更多關于MySQL索引完整教程的資料請關注腳本之家其它相關文章!

相關文章

  • MySQL?8.0.29?安裝配置方法圖文教程

    MySQL?8.0.29?安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了MySQL?8.0.29?安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Linux系統(tǒng)下MySQL配置主從分離的步驟

    Linux系統(tǒng)下MySQL配置主從分離的步驟

    MySQL數(shù)據(jù)庫自身提供的主從復制功能可以實現(xiàn)數(shù)據(jù)的多處自動備份,實現(xiàn)數(shù)據(jù)庫的拓展,多個數(shù)據(jù)備份不僅加強數(shù)據(jù)的安全性,通過實現(xiàn)讀寫分離還能進一步提升數(shù)據(jù)庫的負載性能,這篇文章主要給大家介紹了關于在Linux系統(tǒng)下MySQL配置主從分離的相關資料,需要的朋友可以參考下
    2022-03-03
  • MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL作為一個存儲數(shù)據(jù)的產(chǎn)品,怎么確保數(shù)據(jù)的持久性和不丟失才是最重要的,感興趣的可以跟隨本文一探究竟,文中通過圖文結合給大家講解的非常詳細,需要的朋友快來跟著小編一起來學習吧
    2023-12-12
  • 使用shardingsphere實現(xiàn)mysql數(shù)據(jù)庫分片方式

    使用shardingsphere實現(xiàn)mysql數(shù)據(jù)庫分片方式

    本文介紹如何使用ShardingSphere-JDBC在SpringBoot中實現(xiàn)MySQL水平分庫,涵蓋分片策略、路由算法及零侵入配置方法,適用于大數(shù)據(jù)場景下的數(shù)據(jù)庫擴展
    2025-08-08
  • win10下mysql 8.0.11 壓縮版安裝教程

    win10下mysql 8.0.11 壓縮版安裝教程

    這篇文章主要為大家詳細介紹了win10下mysql 8.0.11 壓縮版安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Mysql之SQL Mode用法詳解

    Mysql之SQL Mode用法詳解

    這篇文章主要介紹了Mysql之SQL Mode用法,可以幫助用戶更好的理解MySQL的工作模式,需要的朋友可以參考下
    2014-07-07
  • MySQL索引事務詳細解析

    MySQL索引事務詳細解析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫索引事務,索引是為了加速對表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲結;事物是屬于計算機中一個很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進入文章了解具體內(nèi)容吧
    2022-01-01
  • MySQL中SHOW TABLE STATUS的使用及說明

    MySQL中SHOW TABLE STATUS的使用及說明

    這篇文章主要介紹了MySQL中SHOW TABLE STATUS的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Linux系統(tǒng)怎樣查看mysql的安裝路徑

    Linux系統(tǒng)怎樣查看mysql的安裝路徑

    這篇文章主要介紹了Linux系統(tǒng)怎樣查看mysql的安裝路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • MySQL數(shù)據(jù)讀寫分離MaxScale相關配置

    MySQL數(shù)據(jù)讀寫分離MaxScale相關配置

    這篇文章主要為大家介紹了MySQL數(shù)據(jù)讀寫分離MaxScale相關配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論

盱眙县| 新津县| 永州市| 启东市| 尚义县| 高尔夫| 宣汉县| 孝感市| 哈巴河县| 洛宁县| 改则县| 永定县| 临澧县| 彰化市| 高雄县| 苍溪县| 涪陵区| 黄平县| 府谷县| 丹寨县| 临沂市| 大方县| 恩平市| 郑州市| 稷山县| 马边| 海晏县| 西林县| 辽源市| 额敏县| 洪湖市| 镶黄旗| 澜沧| 南城县| 凌海市| 三亚市| 突泉县| 安图县| 阜城县| 皮山县| 富裕县|