目录
1. 添加索引
1.1 创建表时添加索引1.2 使用 ALTER TABLE 添加索引1.3 使用 CREATE INDEX 语句
2. 删除索引
2.1 使用 ALTER TABLE 删除索引2.2 使用 DROP INDEX 语句
3. 查看索引信息
4. 索引类型说明
4.1 不同类型的索引
5. 实际示例
6. 最佳实践和注意事项
6.1 索引设计建议6.2 注意事项6.3 性能监控在 MySQL 中,索引是提高查询性能的重要工具。以下是关于 MySQL 索引添加和删除的详细说明:
1. 添加索引
1.1 创建表时添加索引-- 创建表时添加普通索引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 添加索引-- 添加普通索引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 语句-- 创建普通索引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 删除索引-- 删除普通索引ALTER TABLE users DROP INDEX idx_username;-- 删除唯一索引ALTER TABLE users DROP INDEX idx_email;-- 删除主键索引ALTER TABLE users DROP PRIMARY KEY;2.2 使用 DROP INDEX 语句-- 删除索引DROP INDEX idx_username ON users;-- 删除唯一索引DROP INDEX idx_email ON users;
3. 查看索引信息
-- 查看表的索引信息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 不同类型的索引-- 普通索引(最基本的索引,没有唯一性限制)
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. 实际示例
-- 创建示例表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 索引设计建议-- 为经常查询的列创建索引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 注意事项不要过度索引:每个索引都会增加写操作的开销选择合适的前缀长度:对于长文本列CREATE INDEX idx_name ON table_name (column_name(10)); -- 前缀索引考虑索引选择性:高选择性的列更适合建索引定期维护索引:使用ANALYZE TABLE更新索引统计信息6.3 性能监控-- 检查索引使用情况EXPLAIN SELECT * FROM users WHERE username = 'john';-- 查看未使用的索引(需要开启性能模式)
SELECT * FROM sys.schema_unused_indexes;通过合理使用索引,可以显著提高 MySQL 数据库的查询性能,但需要根据具体的查询模式和数据特征来设计和维护索引。
到此这篇关于MySQL索引添加与删除方法实际示例的文章就介绍到这了,更多相关mysql索引添加与删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:MySQL中索引添加与删除的操作方法详解mysql为字段添加和删除唯一性索引(unique) 的方法mysql表添加索引的几种实现方法mysql 添加索引的实现步骤MySQL添加索引及添加字段并建立索引方式MySQL中索引的创建及删除方法MySQL查看、创建和删除索引的方法
