面试题答案
一键面试- 删除索引的SQL语句:
ALTER TABLE test_table DROP INDEX test_index;
- 删除索引后对查询性能在不同场景下的影响:
- 全表扫描场景:
- 如果查询通常是全表扫描,例如
SELECT * FROM test_table;
,删除test_index
索引对查询性能基本没有负面影响。因为全表扫描并不依赖索引,反而在表数据插入、更新、删除时,索引会增加维护成本。所以这种情况下,删除索引可能会提升写操作的性能。
- 如果查询通常是全表扫描,例如
- 基于索引列查询场景:
- 若查询是基于
test_index
索引列进行条件筛选,如SELECT * FROM test_table WHERE index_column = 'value';
,删除索引后,查询性能会显著下降。原本可以通过索引快速定位到满足条件的数据行,现在需要进行全表扫描来查找,数据量越大,性能下降越明显。
- 若查询是基于
- 多表关联场景(若索引用于关联):
- 当
test_table
与其他表进行关联查询,且test_index
索引列参与关联条件时,如SELECT * FROM test_table JOIN other_table ON test_table.index_column = other_table.related_column;
,删除索引会使关联操作无法利用索引加速,导致性能变差。关联操作可能需要对笛卡尔积结果进行全量扫描来匹配关联条件,尤其在大表关联时,性能损耗巨大。
- 当
- 全表扫描场景: