面试题答案
一键面试- 思路:
- 此查询涉及到
customer_id
、order_date
和order_status
这几个字段的筛选,以及按total_amount
排序。 - 为了优化查询,索引应该包含查询中使用到的过滤条件字段和排序字段。由于查询条件有
customer_id
、order_date
和order_status
,排序字段是total_amount
,所以可以创建一个复合索引。 - 复合索引的字段顺序很重要,应该将选择性高(区分度大)的字段放在前面。一般来说,
customer_id
区分度较高,然后是order_date
,接着是order_status
,最后是total_amount
。这样可以最大程度利用索引来加速查询。
- 此查询涉及到
- 索引构建语句(以MySQL为例):
CREATE INDEX idx_customer_date_status_amount ON orders (customer_id, order_date, order_status, total_amount);
在上述语句中,CREATE INDEX
用于创建索引,idx_customer_date_status_amount
是自定义的索引名称,ON orders
表示在orders
表上创建索引,括号内按顺序列出了索引包含的字段。
不同数据库对于索引创建的语法可能略有不同,比如在Oracle中创建复合索引的语法如下:
CREATE INDEX idx_customer_date_status_amount ON orders (customer_id, order_date, order_status, total_amount);
语法基本类似,但在一些细节和特定功能上可能存在差异。例如,Oracle有更多的索引类型和参数可设置,如FREELIST
等相关设置,这里仅以简单创建复合索引为例。
在SQL Server中创建复合索引语法如下:
CREATE INDEX idx_customer_date_status_amount ON orders (customer_id, order_date, order_status, total_amount);
语法和MySQL、Oracle类似,但SQL Server也有其独特的索引选项,如INCLUDE
关键字等,可用于覆盖索引等操作。