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

MySQL添加索引的5種方式

 更新時間:2026年03月12日 09:22:06   作者:AI老李  
在MySQL中索引(Index)是數(shù)據(jù)庫優(yōu)化的核心機制,它像書的目錄,幫助快速定位數(shù)據(jù),而非全表掃描,本詳解聚焦5種常見添加索引方式,基于官方手冊與Percona基準,這些方式覆蓋80%場景,需要的朋友可以參考下

引言:MySQL索引,查詢性能的“秘密武器”

在MySQL中,**索引(Index)**是數(shù)據(jù)庫優(yōu)化的核心機制,它像書的目錄,幫助快速定位數(shù)據(jù),而非全表掃描。添加索引可將查詢時間從O(n)降至O(log n),2026年MySQL 8.0+的InnoDB引擎支持多種索引類型(如B+樹、哈希、全文)。本詳解聚焦5種常見添加索引方式:CREATE INDEX、ALTER TABLE、CREATE TABLE時定義、DROP INDEX刪除(作為管理補充)、OPTIMIZE TABLE優(yōu)化。基于官方手冊與Percona基準,這些方式覆蓋80%場景。目標:掌握后,你能針對表結(jié)構(gòu)選擇最佳方式,提升查詢速度50%以上。預計閱讀時長:15分鐘。準備MySQL Workbench?立即建表測試一個PRIMARY KEY!

核心方式速覽:添加索引的5種方法表格

以下表格對比5種方式的關(guān)鍵語法、適用性和優(yōu)缺點(基于MySQL 8.0+,InnoDB默認):

方式序號方法名稱核心語法示例適用階段優(yōu)缺點性能影響
1CREATE INDEXCREATE INDEX idx_name ON table (col);表已存在簡單直接;支持多列(復合)即時生效,鎖表短暫
2ALTER TABLE ADD INDEXALTER TABLE table ADD INDEX idx (col);表已存在靈活,支持UNIQUE/FULLTEXT可能重構(gòu)表(大表慢)
3CREATE TABLE時定義CREATE TABLE table (col INDEX);建表時高效,一步到位;支持多類型建表即優(yōu)化,無額外開銷
4DROP INDEX(管理方式)ALTER TABLE table DROP INDEX idx;索引已存在,需刪除重建清理冗余;間接“添加”新索引釋放空間,但重建耗時
5OPTIMIZE TABLEOPTIMIZE TABLE table;表已存在,優(yōu)化碎片碎片整理,提升現(xiàn)有索引效率適用于DELETE/UPDATE后

解讀:方式1-3直接添加,4為管理補充,5為間接優(yōu)化。InnoDB主鍵自動索引;大表添加索引需OFFLINE模式避免鎖。

詳細講解:每種方式的原理、代碼與最佳實踐

方式1:CREATE INDEX —— 獨立創(chuàng)建二級索引

原理:直接在現(xiàn)有表上添加非主鍵索引,支持單/多列。MySQL創(chuàng)建B+樹結(jié)構(gòu),存儲鍵值+行指針。

作用:快速定位WHERE/JOIN條件,提升SELECT效率。

實戰(zhàn)代碼

-- 假設(shè)表:CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100));

-- 單列索引
CREATE INDEX idx_name ON users (name);

-- 復合索引(多列)
CREATE INDEX idx_name_email ON users (name, email);

-- 唯一索引
CREATE UNIQUE INDEX idx_email ON users (email);

-- 驗證
SHOW INDEX FROM users;  -- 查看所有索引
EXPLAIN SELECT * FROM users WHERE name = '張三';  -- 見key: idx_name

輸出:EXPLAIN顯示使用索引。最佳實踐:列選擇性高(>10%唯一值)優(yōu)先;大表用ALGORITHM=INPLACE加速。

方式2:ALTER TABLE ADD INDEX —— 靈活的表結(jié)構(gòu)修改

原理:通過ALTER修改表定義,添加INDEX/UNIQUE/FULLTEXT/SPATIAL。支持原子操作,但大表可能鎖表(用COPY算法)。

作用:集成其他變更(如ADD COLUMN),適合生產(chǎn)維護。

實戰(zhàn)代碼

-- 基本添加
ALTER TABLE users ADD INDEX idx_name (name);

-- 唯一索引
ALTER TABLE users ADD UNIQUE INDEX idx_email (email);

-- 全文本索引(MyISAM/InnoDB)
ALTER TABLE articles ADD FULLTEXT INDEX ft_title (title);

-- 空間索引(InnoDB 5.7+)
ALTER TABLE locations ADD SPATIAL INDEX idx_geom (geom);

-- 驗證變更
SHOW CREATE TABLE users;  -- 見索引定義

輸出:表結(jié)構(gòu)更新。最佳實踐:生產(chǎn)用LOCK=NONE(INPLACE);監(jiān)控ALTER TABLE ... LOCK=SHARED避免讀鎖。

方式3:CREATE TABLE時定義索引 —— 建表即優(yōu)化的“一站式”

原理:在CREATE TABLE中內(nèi)聯(lián)定義PRIMARY/UNIQUE/INDEX,確保索引與表同步創(chuàng)建,無額外鎖。

作用:新表設(shè)計時用,減少后期維護。

實戰(zhàn)代碼

-- 基本表帶索引
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,  -- 主鍵自動索引
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2),
    INDEX idx_name (name),  -- 二級索引
    UNIQUE INDEX idx_sku (sku)  -- 唯一索引
) ENGINE=InnoDB;

-- 全文索引
CREATE TABLE posts (
    id INT PRIMARY KEY,
    content TEXT,
    FULLTEXT INDEX ft_content (content)
) ENGINE=InnoDB;

-- 驗證
SHOW INDEX FROM products;

輸出:新表即帶索引。最佳實踐:PRIMARY KEY放首位;復合索引列順序:等值在前,范圍在后(最左前綴原則)。

方式4:DROP INDEX —— 刪除重建的“間接添加”管理

原理:先DROP舊索引釋放空間,再用方式1/2添加新索引。適用于替換無效索引。

作用:優(yōu)化索引策略,防冗余(過多索引增寫開銷)。

實戰(zhàn)代碼

-- 刪除舊索引
ALTER TABLE users DROP INDEX idx_old_name;

-- 添加新索引(重建)
CREATE INDEX idx_new_name ON users (name(10));  -- 前綴索引,VARCHAR限長

-- 驗證
SHOW INDEX FROM users WHERE Key_name = 'idx_new_name';

輸出:舊索引消失,新索引生效。最佳實踐:大表DROP前備份;用ANALYZE TABLE更新統(tǒng)計信息。

方式5:OPTIMIZE TABLE —— 碎片優(yōu)化的“間接加速”

原理:重建表/索引,整理碎片(DELETE/UPDATE后),InnoDB用ALTER TABLE ENGINE=INNODB實現(xiàn)。

作用:提升現(xiàn)有索引的掃描效率,非直接添加,但常與新索引結(jié)合。

實戰(zhàn)代碼

-- 優(yōu)化表(重建索引)
OPTIMIZE TABLE users;

-- 等價ALTER(InnoDB)
ALTER TABLE users ENGINE=InnoDB;

-- 驗證碎片減少
SELECT TABLE_NAME, DATA_FREE / 1024 / 1024 AS free_mb
FROM information_schema.TABLES
WHERE TABLE_NAME = 'users';

輸出:free_mb降至0。最佳實踐:定期運行(cron);MyISAM用OPTIMIZE,InnoDB慎用(在線DDL優(yōu)先)。

實戰(zhàn)方法 論:添加索引的五步框架

基于2026 MySQL最佳實踐(如EXPLAIN ANALYZE),以下框架確保索引高效(周期30分鐘)。

步驟1:需求分析(5分鐘)

  • 行動:用EXPLAIN查慢SQL,選WHERE/JOIN列。
  • 工具:pt-query-digest日志分析。
  • KPI:痛點列覆蓋100%。

步驟2:方式選擇(5分鐘)

  • 行動:建表用方式3;現(xiàn)有表優(yōu)先方式1。
  • 工具:SHOW INDEX預覽。
  • KPI:無冗余索引。

步驟3:執(zhí)行添加(10分鐘)

  • 行動:小表直接,大表用INPLACE。
  • 工具:mysql命令行。
  • KPI:無鎖超時。

步驟4:驗證效果(5分鐘)

  • 行動:前后EXPLAIN對比,測查詢時間。
  • 工具:BENCHMARK()函數(shù)。
  • KPI:速度提升>30%。

步驟5:維護優(yōu)化(持續(xù))

  • 行動:定期OPTIMIZE + DROP無效。
  • 工具:cron腳本。
  • KPI:索引命中率>80%。
步驟時長重點工具預期收益
1. 分析5minEXPLAIN精準定位
2. 選擇5minSHOW INDEX策略匹配
3. 執(zhí)行10minALTER/CREATE索引就位
4. 驗證5minBENCHMARK效果量化
5. 維護持續(xù)OPTIMIZE長期高效

結(jié)語:MySQL索引添加,查詢魔力的解鎖

從CREATE INDEX的簡捷到OPTIMIZE的細膩,5種方式鑄就了MySQL性能的脊梁——在春川的春日午后(當前KST 11:29,2026.3.7),試著為一個用戶表添加name索引并EXPLAIN一個查詢,你將見證速度飛躍!

以上就是MySQL添加索引的5種方式的詳細內(nèi)容,更多關(guān)于MySQL添加索引方式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL誤刪數(shù)據(jù)恢復的操作指南

    MySQL誤刪數(shù)據(jù)恢復的操作指南

    本文檔詳細介紹了MySQL誤刪數(shù)據(jù)的恢復流程,包括驗證binlog、數(shù)據(jù)提取、格式轉(zhuǎn)換和批量導入等步驟,通過示例,展示了如何在物聯(lián)網(wǎng)場景下恢復時序數(shù)據(jù),并提供了一系列關(guān)鍵命令和預防措施以避免誤刪,需要的朋友可以參考下
    2025-12-12
  • mysql8.0.20下載安裝及遇到的問題(圖文詳解)

    mysql8.0.20下載安裝及遇到的問題(圖文詳解)

    這篇文章主要介紹了mysql8.0.20下載安裝及遇到的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • MAC下Mysql5.7+ MySQL Workbench安裝配置方法圖文教程

    MAC下Mysql5.7+ MySQL Workbench安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了MAC下Mysql5.7+ MySQL Workbench安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • mysql日常使用中常見報錯大全

    mysql日常使用中常見報錯大全

    MySQL初學者新安裝好數(shù)據(jù)庫及使用過程中經(jīng)常遇到以下幾類錯誤,本文給大家詳細整理并給出完美解決方案,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • MySQL遠程連接配置:解決Host XXX is not allowed to connect錯誤

    MySQL遠程連接配置:解決Host XXX is not allowed&nb

    本文詳細解析了MySQL遠程連接時出現(xiàn)的'Host is not allowed to connect'錯誤,提供了完整的配置指南,從權(quán)限修改到安全加固,幫助用戶快速解決連接問題,感興趣的可以了解一下
    2026-03-03
  • mysql 5.6 從陌生到熟練之_數(shù)據(jù)庫備份恢復的實現(xiàn)方法

    mysql 5.6 從陌生到熟練之_數(shù)據(jù)庫備份恢復的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猰ysql 5.6 從陌生到熟練之_數(shù)據(jù)庫備份恢復的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • Windows 64位重裝MySQL的教程(Zip版、解壓版MySQL安裝)

    Windows 64位重裝MySQL的教程(Zip版、解壓版MySQL安裝)

    這篇文章主要介紹了Windows 64位,重裝MySQL的方法(Zip版、解壓版MySQL安裝),本文給大家介紹的非常詳細,具有一定的參考借鑒價值需要的朋友可以參考下
    2020-02-02
  • Mysql數(shù)據(jù)庫報錯2003?Can't?connect?to?MySQL?server?on?'localhost'?(10061)解決

    Mysql數(shù)據(jù)庫報錯2003?Can't?connect?to?MySQL?server?on?

    最近在用mysql,打開mysql的圖形化界面要連接時出現(xiàn)2003錯誤,所以下面這篇文章主要給大家介紹了關(guān)于Mysql數(shù)據(jù)庫報錯2003?Can't?connect?to?MySQL?server?on?'localhost'?(10061)的解決方式,需要的朋友可以參考下
    2022-09-09
  • MySQL在線DDL gh-ost使用總結(jié)

    MySQL在線DDL gh-ost使用總結(jié)

    在本篇內(nèi)容里小編給大家整理了關(guān)于MySQL在線DDL gh-ost使用方法和相關(guān)知識點,需要的朋友們學習下。
    2019-02-02
  • MySQL主從同步機制與同步延時問題追查過程

    MySQL主從同步機制與同步延時問題追查過程

    這篇文章主要給大家介紹了關(guān)于MySQL主從同步機制與同步延時問題追查的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02

最新評論

庄河市| 金沙县| 德州市| 尉犁县| 安吉县| 启东市| 内黄县| 石楼县| 平邑县| 鄢陵县| 定结县| 涟水县| 隆昌县| 仁怀市| 长武县| 新建县| 仙居县| 三都| 泽库县| 元氏县| 昌黎县| 延川县| 柯坪县| 丹寨县| 福海县| 砚山县| 长宁区| 贡觉县| 开封县| 嘉鱼县| 化德县| 申扎县| 盘锦市| 新乡市| 永仁县| 三门县| 洱源县| 清远市| 栾川县| 凤山县| 汉阴县|