跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

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. 性能优化

  • 使用覆盖索引
  • 避免索引失效
  • 定期维护索引
  • 监控索引使用

注意事项

  1. 索引设计

    • 业务需求分析
    • 查询模式分析
    • 数据分布考虑
    • 存储空间考虑
  2. 性能影响

    • 写入性能
    • 存储空间
    • 维护成本
    • 查询优化
  3. 运维管理

    • 监控告警
    • 性能分析
    • 定期维护
    • 故障处理
  4. 重要参数

    • innodb_buffer_pool_size
    • innodb_log_file_size
    • max_heap_table_size
    • key_buffer_size