当前位置: 首页 > news >正文

MySQL索引添加与删除方法详解

在 MySQL 中,索引是提高查询性能的重要工具。以下是关于 MySQL 索引添加和删除的详细说明:

1. 添加索引

1.1 创建表时添加索引

sql

-- 创建表时添加普通索引
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,INDEX idx_username (username),  -- 普通索引UNIQUE INDEX idx_email (email)  -- 唯一索引
);-- 创建表时添加复合索引
CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_date DATE NOT NULL,amount DECIMAL(10,2),INDEX idx_user_date (user_id, order_date)  -- 复合索引
);

1.2 使用 ALTER TABLE 添加索引

sql

-- 添加普通索引
ALTER TABLE users ADD INDEX idx_username (username);-- 添加唯一索引
ALTER TABLE users ADD UNIQUE INDEX idx_email (email);-- 添加主键索引(如果表没有主键)
ALTER TABLE users ADD PRIMARY KEY (id);-- 添加复合索引
ALTER TABLE orders ADD INDEX idx_user_date (user_id, order_date);-- 添加全文索引
ALTER TABLE articles ADD FULLTEXT INDEX idx_content (content);

1.3 使用 CREATE INDEX 语句

sql

-- 创建普通索引
CREATE INDEX idx_username ON users (username);-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users (email);-- 创建复合索引
CREATE INDEX idx_user_date ON orders (user_id, order_date);-- 创建全文索引
CREATE FULLTEXT INDEX idx_content ON articles (content);

2. 删除索引

2.1 使用 ALTER TABLE 删除索引

sql

-- 删除普通索引
ALTER TABLE users DROP INDEX idx_username;-- 删除唯一索引
ALTER TABLE users DROP INDEX idx_email;-- 删除主键索引
ALTER TABLE users DROP PRIMARY KEY;

2.2 使用 DROP INDEX 语句

sql

-- 删除索引
DROP INDEX idx_username ON users;-- 删除唯一索引
DROP INDEX idx_email ON users;

3. 查看索引信息

sql

-- 查看表的索引信息
SHOW INDEX FROM users;-- 查看创建表的语句(包含索引信息)
SHOW CREATE TABLE users;-- 通过信息模式查看索引
SELECT TABLE_NAME,INDEX_NAME,COLUMN_NAME,SEQ_IN_INDEX
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'users';

4. 索引类型说明

4.1 不同类型的索引

sql

-- 普通索引(最基本的索引,没有唯一性限制)
CREATE INDEX idx_name ON table_name (column_name);-- 唯一索引(确保列值的唯一性)
CREATE UNIQUE INDEX idx_name ON table_name (column_name);-- 主键索引(特殊的唯一索引,不允许NULL值)
ALTER TABLE table_name ADD PRIMARY KEY (column_name);-- 复合索引(多列组合的索引)
CREATE INDEX idx_name ON table_name (col1, col2, col3);-- 全文索引(用于全文搜索)
CREATE FULLTEXT INDEX idx_name ON table_name (text_column);-- 空间索引(用于地理数据)
CREATE SPATIAL INDEX idx_name ON table_name (spatial_column);

5. 实际示例

sql

-- 创建示例表
CREATE TABLE employees (id INT AUTO_INCREMENT,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100),department_id INT,hire_date DATE,salary DECIMAL(10,2),PRIMARY KEY (id)
);-- 添加各种索引
-- 单列索引
ALTER TABLE employees ADD INDEX idx_last_name (last_name);-- 唯一索引
ALTER TABLE employees ADD UNIQUE INDEX idx_email (email);-- 复合索引
ALTER TABLE employees ADD INDEX idx_dept_hire (department_id, hire_date);-- 查看索引
SHOW INDEX FROM employees;-- 删除索引
ALTER TABLE employees DROP INDEX idx_last_name;
DROP INDEX idx_email ON employees;

6. 最佳实践和注意事项

6.1 索引设计建议

sql

-- 为经常查询的列创建索引
CREATE INDEX idx_frequently_queried ON table_name (frequently_queried_column);-- 为外键列创建索引
CREATE INDEX idx_foreign_key ON child_table (parent_id);-- 为WHERE子句中的列创建索引
CREATE INDEX idx_where_condition ON table_name (column_used_in_where);-- 为ORDER BY和GROUP BY的列创建索引
CREATE INDEX idx_order_group ON table_name (column_used_for_ordering);

6.2 注意事项

  1. 不要过度索引:每个索引都会增加写操作的开销

  2. 选择合适的前缀长度:对于长文本列

sql

CREATE INDEX idx_name ON table_name (column_name(10)); -- 前缀索引
  1. 考虑索引选择性:高选择性的列更适合建索引

  2. 定期维护索引:使用 ANALYZE TABLE 更新索引统计信息

6.3 性能监控

sql

-- 检查索引使用情况
EXPLAIN SELECT * FROM users WHERE username = 'john';-- 查看未使用的索引(需要开启性能模式)
SELECT * FROM sys.schema_unused_indexes;

通过合理使用索引,可以显著提高 MySQL 数据库的查询性能,但需要根据具体的查询模式和数据特征来设计和维护索引。

http://www.dtcms.com/a/586105.html

相关文章:

  • Node-RED:5分钟快速上手:安装与环境配置
  • 青海移动网站建设wordpress 显示标题
  • 3.1.STM32-GPIO通用输入输出口
  • 东营 网站建设公司网站项目设计
  • [论文阅读] AI + 职业教育 | 从框架到实践:职业院校教师人工智能素养提升的完整方案
  • 零基础入门C语言之C语言实现数据结构之顺序表应用
  • 网站建设 淘宝详情东莞网站建设哪里好
  • 大连的网站设计公司wordpress支持页面模版
  • 孤能子视角:房地产,独一无二的“社会场域能力“
  • 【AI安全】检索增强生成(RAG)
  • qt中以this为父窗口和以centralwidget为父窗口有什么区别
  • xxx网站建设与优化推广做网站市场报价步登顶
  • 【Spring Boot】REST与RESTful详解,基于Spring Boot的RESTful API实现
  • 2025年渗透测试面试题总结-234(题目+回答)
  • Z-Wave物联网网关开发专用 SDK - Unify
  • 3g微网站北京住房和城乡建设官方网站
  • 济南一哥网站建设网站建设明薇通网络服务好
  • 弱函数 vs 回调函数:本质区别解析
  • 2024年 国内养老机构及床位数据
  • 建设部标准规范网站wordpress防止采集
  • 4.3 IP: Internet Protocol
  • 一般购物网站项目深圳做网站比较好天涯
  • 网站建设的重点难点企业简介 网站建设
  • PostgreSQL 19新特性之GROUP BY ALL
  • 技能补全之Python AES GCM 加密存储
  • NCP13992 CS 分压计算
  • MySQL事务:如何保证ACID?MVCC到底如何工作?
  • 240-基于Python的医疗疾病数据可视化分析系统
  • 网站开发合同管辖权异议商务网站建设实训心得体会
  • 【CUDA笔记】01-入门简介