面试题答案
一键面试1. 直接删除重复索引
- 策略:通过
SHOW INDEX FROM table_name;
命令找出重复索引,然后使用DROP INDEX index_name ON table_name;
语句直接删除。 - 对数据库性能影响:
- 查询性能:删除重复索引后,查询优化器在选择执行计划时搜索空间变小,减少了优化器计算成本,可能提升查询性能。特别是在高并发读场景下,索引维护成本降低,读性能提升可能更明显。
- 写入性能:由于减少了索引维护操作,如插入、更新和删除操作时不必同时更新重复索引,写入性能也会有所提升。
- 对数据一致性影响:无负面影响。数据一致性主要由事务机制保证,删除重复索引不影响事务执行和数据一致性。
- 对应用程序运行影响:正常情况下无影响。但如果应用程序依赖特定索引执行某些复杂查询(虽然重复索引通常不必要),删除后可能需要检查并调整查询语句,否则可能导致查询结果不准确或性能下降。
2. 保留一个,修改其他为覆盖索引(若适用)
- 策略:确定一个主索引保留,对于其他重复索引,若查询模式允许,将其修改为覆盖索引。例如,原重复索引为
CREATE INDEX idx1 ON table_name (col1, col2);
,若查询经常是SELECT col1, col2, col3 FROM table_name WHERE col1 = 'value';
,可将其中一个重复索引修改为CREATE INDEX idx_covered ON table_name (col1, col2, col3);
- 对数据库性能影响:
- 查询性能:对于涉及覆盖索引列的查询,由于查询所需数据都可从索引中获取,无需回表操作,读性能显著提升。在高并发读场景下,可减少磁盘 I/O,提高查询响应速度。
- 写入性能:由于索引列增多,写入时索引维护成本略有增加,写入性能可能稍有下降,但相比直接删除重复索引,下降幅度较小。
- 对数据一致性影响:无负面影响。覆盖索引只是对索引结构的优化,不影响数据一致性的保证机制。
- 对应用程序运行影响:若应用程序查询符合覆盖索引优化场景,应用程序性能会提升。但如果应用程序有写入操作,可能因写入性能轻微下降而感受到响应时间略微变长。
3. 合并重复索引
- 策略:将多个重复索引合并成一个更全面的索引。例如,有
CREATE INDEX idx1 ON table_name (col1);
和CREATE INDEX idx2 ON table_name (col1);
,合并为CREATE INDEX idx_combined ON table_name (col1);
;若有CREATE INDEX idx1 ON table_name (col1);
和CREATE INDEX idx2 ON table_name (col1, col2);
,可保留后者。 - 对数据库性能影响:
- 查询性能:减少了索引数量,查询优化器选择执行计划更高效,可能提升查询性能。特别是在高并发读场景下,减少索引维护开销,读性能有提升潜力。
- 写入性能:写入时只需维护一个索引,相比多个重复索引,写入性能有所提升。
- 对数据一致性影响:无负面影响。合并索引不改变数据一致性保证机制。
- 对应用程序运行影响:一般无影响。但如果应用程序之前依赖多个重复索引(尽管不合理),可能需要检查查询逻辑,确保合并后应用程序功能正常。