面试题答案
一键面试索引设计思路
- 复合索引:由于查询涉及到
customer_id
、order_date
、product_ids
和total_amount
多个条件,创建一个复合索引可以有效覆盖这些查询条件。 - 索引顺序:索引字段顺序应该根据查询条件的选择性和使用频率来确定。
customer_id
和product_id
是精确匹配条件,放在前面;order_date
是范围查询,放在中间;total_amount
是条件过滤,放在最后。这样的顺序有助于提高索引的使用效率。
创建索引的语句
假设使用的是MySQL数据库,创建索引的语句如下:
CREATE INDEX idx_customer_product_date_amount
ON orders (customer_id, product_ids, order_date, total_amount);
查询执行计划分析
- 使用EXPLAIN关键字:在MySQL中,可以使用
EXPLAIN
关键字来查看查询执行计划。例如:
EXPLAIN SELECT *
FROM orders
WHERE customer_id = [specific_customer_id]
AND product_ids IN ([specific_product_id])
AND order_date >= CURDATE() - INTERVAL 1 MONTH
AND total_amount > 1000;
- 分析执行计划结果:
key
列:如果显示为idx_customer_product_date_amount
,说明索引被正确使用。key_len
列:显示了索引使用的字节数,通过该值可以判断索引是否被完全利用。ref
列:显示了使用索引进行查询时,哪些列或常量与索引进行了比较。rows
列:估计需要扫描的行数,该值越小,说明查询性能越好。
通过分析执行计划,可以验证索引是否有效,并且根据实际情况对索引进行调整优化。