面试题答案
一键面试- 创建复合索引:
在
orders
表上,应该创建一个基于customer_id
和order_date
的复合索引。SQL语句如下:CREATE INDEX idx_customer_order_date ON orders (customer_id, order_date);
- 最左前缀原则:
- 最左前缀原则指的是在使用复合索引时,查询条件必须从索引的最左边开始匹配。在上述创建的复合索引
idx_customer_order_date
中,最左边的列是customer_id
。 - 当查询条件为
WHERE customer_id = 123 AND order_date = '2023 - 01 - 01'
时,MySQL可以利用这个复合索引,因为它从最左边的customer_id
开始匹配,然后再匹配order_date
,能够快速定位到符合条件的记录,避免全表扫描。 - 当查询条件为
WHERE order_date = '2023 - 01 - 01'
时,由于没有从复合索引的最左边customer_id
开始匹配,MySQL无法利用这个复合索引来避免全表扫描。
- 最左前缀原则指的是在使用复合索引时,查询条件必须从索引的最左边开始匹配。在上述创建的复合索引
- 查询条件只包含
order_date
时:- 该复合索引不能避免全表扫描。
- 原因是复合索引的最左前缀原则,由于查询条件没有以复合索引的最左边列
customer_id
开始,MySQL无法通过该复合索引快速定位记录,只能进行全表扫描来获取满足order_date
条件的记录。