技术文摘
实例教你如何优化 SQL
2025-01-15 01:25:04 小编
在数据库管理与开发中,优化 SQL 至关重要,它能显著提升系统性能,减少资源消耗。下面通过实例为大家讲解如何优化 SQL。
假设有一个电商数据库,其中有一张商品表 products,包含字段 product_id、product_name、price、category_id 等,还有一张分类表 categories,包含 category_id 和 category_name 字段。现在要查询每个分类下价格最高的商品信息。
原始的 SQL 语句可能是这样:
SELECT p.product_id, p.product_name, p.price, p.category_id, c.category_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
WHERE (p.category_id, p.price) IN (
SELECT category_id, MAX(price)
FROM products
GROUP BY category_id
);
这种写法虽然能得到结果,但效率较低。因为子查询会对整个 products 表进行全表扫描,然后再与主查询进行关联。
优化后的 SQL 可以使用窗口函数:
WITH RankedProducts AS (
SELECT p.product_id, p.product_name, p.price, p.category_id, c.category_name,
ROW_NUMBER() OVER (PARTITION BY p.category_id ORDER BY p.price DESC) AS rn
FROM products p
JOIN categories c ON p.category_id = c.category_id
)
SELECT product_id, product_name, price, category_id, category_name
FROM RankedProducts
WHERE rn = 1;
这里通过窗口函数 ROW_NUMBER() 为每个分类下的商品按价格从高到低排序,并赋予一个行号 rn。然后在外部查询中只选择 rn 为 1 的记录,即每个分类下价格最高的商品。
另一个常见的优化点是索引的使用。如果在 products 表的 category_id 和 price 字段上创建联合索引:
CREATE INDEX idx_category_price ON products (category_id, price);
这样在执行上述查询时,数据库可以利用索引快速定位到所需数据,大大提高查询速度。
优化 SQL 需要从查询逻辑和索引使用等多方面入手。通过合理运用窗口函数、避免全表扫描,以及正确创建和使用索引,能够有效提升 SQL 的执行效率,为应用程序的稳定运行提供有力支持。
- Win7 打印机未指定的解决之道
- 华为鸿蒙 HarmonyOS NEXT 仓颉编程语言 开发者预览版 Beta 自主可控招募
- 华为鸿蒙 HarmonyOS NEXT Beta 版第三批先锋用户招募 名额增至 3 万
- 不同操作系统中查看自身 IP 地址及路由器 IP 地址的方法
- 统信 UOS V20 桌面专业版更新发布 更新内容汇总
- VMware 中安装 macOS Sonoma 的方法 及教程
- MacOS 中快速显示隐藏文件的方法
- Mac 屏幕忽亮忽暗的原因及自动调节亮度的启用与禁用技巧
- Win7 系统如何去掉输入法前的 CH 图标及相关技巧
- 苹果 Mac 关闭原彩显示的方法 或 Mac 原彩显示功能的禁用技巧
- macOS Sonoma 敏感内容警告的使用方法及 mac 自动打码不当内容的技巧
- Win7 主板自带热点的开启位置及方法
- Win7 主板 CPU 节能模式的关闭步骤
- 如何在 macOS Sonoma 中添加桌面小部件并在 Mac 桌面上使用
- Win7 中显示器 16 位改 32 位色的方法及调节技巧