面试题答案
一键面试索引类型选择
- 前缀索引:如果某些列的数据长度较长,例如文本类型字段,使用前缀索引可以减少索引大小,提升查询性能。比如对于一个很长的
VARCHAR
字段,选取前n个字符创建前缀索引。但要注意前缀长度的选择,太短可能无法有效区分数据,太长则无法发挥前缀索引减小索引大小的优势。 - 覆盖索引:对于频繁的范围查询和排序操作,若查询的列都包含在索引中,使用覆盖索引可以避免回表操作。即创建的索引包含查询中涉及的所有列,这样在查询时直接从索引中获取数据,无需再到表中获取,大大提升性能。
索引列顺序
- 最左前缀原则:在组合索引中,要按照查询条件中最常使用的列顺序来创建索引。例如查询条件经常是
WHERE col1 = value1 AND col2 = value2
,那么索引应按照col1, col2
的顺序创建,以确保索引能被有效利用。 - 区分度高的列优先:将区分度高(即不同值数量多)的列放在索引前列。区分度高的列能更快缩小查询范围,例如性别列区分度低,而身份证号列区分度高,若有相关查询,身份证号列应优先放在索引中。
其他优化措施
- 定期重建索引:MyISAM表使用一段时间后,索引可能会碎片化,定期重建索引可以整理索引结构,提升性能。例如使用
ALTER TABLE table_name ENGINE = MyISAM
语句重建表及索引。 - 分析表:使用
ANALYZE TABLE
语句更新表的统计信息,使查询优化器能做出更准确的执行计划,从而提升索引性能。