MySQL 索引是提升查询效率的关键,其底层基于 B + 树结构,叶子节点存储数据或主键地址,非叶子节点仅存储索引值,查询时通过二分查找快速定位数据,比全表扫描效率高数十倍。索引分为聚簇索引和非聚簇索引,聚簇索引以主键构建,数据和索引存储在一起;非聚簇索引需通过主键回表查询数据。
索引设计有讲究,联合索引需遵循 “最左前缀原则”,比如创建idx_name_age索引,查询where name='xxx'或where name='xxx' and age=18能命中索引,而where age=18则无法命中。避免索引失效场景,如使用!=、is null、函数操作索引列、字符串不加引号等,这些都会导致全表扫描。
实战中,用EXPLAIN分析 SQL 执行计划,重点关注 type 字段,range、ref、eq_ref 级别性能较好,ALL 则表示全表扫描。优化关联查询时,确保关联字段建立索引,优先使用 inner join 而非 left join;子查询尽量改为关联查询,减少临时表创建。大数据量分页查询可通过主键自增特性优化,如where id>1000 limit 10,避免limit 10000,10的低效写法,实测查询时间从 500ms 降至 30ms。