数据派
聚焦技术和人文,分享干货,共同成长。
聚焦技术和人文,分享干货,共同成长。
SELECT customer_id, order_total
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
order_date
是过滤条件,因此可以为 orders
表的 order_date
列创建索引:CREATE INDEX idx_order_date ON orders (order_date);
customers
表和 orders
表的连接:SELECT c.customer_name, (
SELECT COUNT(*)
FROM orders o
WHERE o.customer_id = c.customer_id
) AS order_count
FROM customers c;
o.customer_id = c.customer_id
,因此可以为 customers
表的 customer_id
列和 orders
表的 customer_id
列分别创建索引:CREATE INDEX idx_customers_customer_id ON customers (customer_id);
CREATE INDEX idx_orders_customer_id ON orders (customer_id);
ORDER BY
或 GROUP BY
子句,在这些列上创建索引可以避免额外的排序和分组操作,提高查询效率。SELECT order_amount, COUNT(*)
FROM (
SELECT order_amount
FROM orders
WHERE order_date > '2023-06-01'
) subquery
GROUP BY order_amount;
orders
表的 order_amount
列创建索引:CREATE INDEX idx_orders_order_amount ON orders (order_amount);
'ACTIVE'
、'INACTIVE'
),创建索引可能不会带来明显的性能提升,甚至可能会增加索引维护的开销。users
表,其中有一个 gender
列,只有 'M'
和 'F'
两个值。为这个列创建索引可能效果不佳:-- 不建议为选择性低的列创建索引
-- CREATE INDEX idx_users_gender ON users (gender);
order_date
和 order_status
进行筛选:SELECT order_id, order_total
FROM orders
WHERE order_date > '2023-06-01' AND order_status = 'COMPLETED';
CREATE INDEX idx_orders_date_status ON orders (order_date, order_status);
order_date
通常放在前面,因为它在查询中可能具有更高的选择性,更能快速缩小数据范围。EXPLAIN
语句)可以帮助我们了解查询的执行方式,包括是否使用了索引、索引的使用效率等。根据执行计划的反馈,我们可以调整索引的选择和创建。EXPLAIN
分析子查询:EXPLAIN SELECT customer_id, order_total
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
EXPLAIN
的结果,如果发现没有使用我们预期的索引,或者索引使用效率不高,就需要重新评估索引的选择或调整索引的创建方式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)