MySQL索引优化
索引概述
1. 什么是索引
flowchart TD
    subgraph 索引节点
        A[根节点]
        B[内部节点]
        C[叶子节点]
    end
    A --> B
    B --> C
索引是数据库中用于提高查询效率的数据结构,类似于书籍的目录。
2. 索引的优势
- 提高查询效率
 - 加速表连接
 - 实现唯一性约束
 - 优化排序和分组
 
索引类型
1. 主键索引
-- 创建主键索引
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);
-- 添加主键索引
ALTER TABLE users ADD PRIMARY KEY (id);
2. 普通索引
-- 创建普通索引
CREATE TABLE products (
    id INT,
    name VARCHAR(100),
    INDEX idx_name (name)
);
-- 添加普通索引
CREATE INDEX idx_name ON products(name);
3. 唯一索引
-- 创建唯一索引
CREATE TABLE employees (
    id INT,
    email VARCHAR(100),
    UNIQUE INDEX idx_email (email)
);
-- 添加唯一索引
CREATE UNIQUE INDEX idx_email ON employees(email);
4. 复合索引
-- 创建复合索引
CREATE TABLE orders (
    id INT,
    user_id INT,
    create_time DATETIME,
    INDEX idx_user_time (user_id, create_time)
);
5. 全文索引
-- 创建全文索引
CREATE TABLE articles (
    id INT,
    title VARCHAR(200),
    content TEXT,
    FULLTEXT INDEX idx_content (content)
);
索引优化策略
1. 索引设计原则
- 最左前缀原则
 - 选择性原则
 - 覆盖索引原则
 - 索引列数限制
 
2. 索引使用分析
-- 查看索引使用情况
SHOW INDEX FROM table_name;
-- 分析表
ANALYZE TABLE table_name;
-- 优化表
OPTIMIZE TABLE table_name;
3. 索引失效场景
- 使用函数运算
 - 使用OR条件
 - 使用LIKE模糊查询
 - 使用!=或<>操作符
 - 使用IS NULL或IS NOT NULL
 
索引维护
1. 索引监控
-- 查看索引使用情况
SHOW INDEX FROM table_name;
-- 查看表状态
SHOW TABLE STATUS LIKE 'table_name';
-- 查看进程列表
SHOW PROCESSLIST;
2. 索引维护
-- 删除索引
DROP INDEX index_name ON table_name;
-- 重建索引
ALTER TABLE table_name DROP INDEX index_name;
ALTER TABLE table_name ADD INDEX index_name (column_name);
最佳实践
1. 索引选择
- 选择合适的索引类型
 - 控制索引数量
 - 考虑查询模式
 - 注意索引大小
 
2. 性能优化
- 使用覆盖索引
 - 避免索引失效
 - 定期维护索引
 - 监控索引使用
 
注意事项
- 
索引设计
- 业务需求分析
 - 查询模式分析
 - 数据分布考虑
 - 存储空间考虑
 
 - 
性能影响
- 写入性能
 - 存储空间
 - 维护成本
 - 查询优化
 
 - 
运维管理
- 监控告警
 - 性能分析
 - 定期维护
 - 故障处理
 
 - 
重要参数
- innodb_buffer_pool_size
 - innodb_log_file_size
 - max_heap_table_size
 - key_buffer_size