什么是索引?

索引是数据库中用于加速数据检索的结构,类似于书籍目录。合理使用索引可大幅降低查询时间,但过度索引会导致写入性能下降。

索引类型

  • B-Tree索引:默认索引类型,适用于范围查询和排序
  • Hash索引:适合等值查询,不支持范围操作
  • 全文索引:针对文本字段的高效搜索
  • 空间索引:用于地理空间数据类型(如MySQL的GIS功能)
数据库索引结构

索引优化的重要性

  • 提升查询效率,减少I/O开销
  • 降低锁竞争,提高并发性能
  • 优化执行计划,避免全表扫描
  • 注意:索引会占用存储空间并影响写入速度

常用优化策略

  1. 选择性索引
    • 为高选择性的列(如唯一值较多的字段)创建索引
    • 避免对低选择性列(如status字段)过度索引
  2. 复合索引
    • 使用多个列组合的索引(如(user_id, create_time)
    • 遵循最左前缀原则
  3. 覆盖索引
    • 索引包含查询所需的所有字段,避免回表
    • 适用于频繁查询的场景
复合索引示例

优化技巧

  • 分析查询计划:使用EXPLAIN查看索引使用情况
  • 避免冗余索引:删除重复或不必要的索引
  • 定期维护索引:重建或重组碎片化严重的索引
  • 合理使用索引提示:在特定场景下强制使用索引

注意事项

  • 索引字段应尽量避免NULL
  • 频繁更新的列不适合创建索引
  • 索引数量与性能并非线性正比
查询执行计划

如需进一步学习SQL查询优化,可参考 SQL查询优化教程