面试题答案
一键面试复合索引设计
应该设计一个复合索引,顺序为 (age, registration_time)
。
原因
- 按年龄范围查询:复合索引的最左前缀原则,索引的最左列是
age
,所以在进行按年龄范围查询时,索引能够有效利用,快速定位到符合年龄范围的记录。 - 按注册时间排序:在符合年龄范围的记录中,由于复合索引中第二列是
registration_time
,数据库可以使用该索引直接对这些记录按注册时间排序,无需额外的排序操作。
局限性
- 插入、更新性能影响:索引会增加插入、更新操作的成本,因为每次数据变动都需要同时更新索引。
- 索引维护成本:复合索引占用更多的存储空间,需要更多的维护成本,包括索引重建、碎片整理等操作。
- 最左前缀限制:如果查询条件不包含
age
字段,这个复合索引将无法被使用,导致查询效率低下。例如只按注册时间查询,索引无法生效。