微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查询优化的 SQL 技巧

如何解决查询优化的 SQL 技巧

我是 sql 新手,有一个关于优化的一般问题。

根据您的个人经验,为了编写优化的查询,我应该考虑哪些事项? 是否有任何特定的命令(例如 JOIN、CASE)我应该尽可能优先或避免?另外,您如何衡量查询效率

抱歉提出了开放性问题,我只是想围绕这个主题展开思考,并且很想听听有经验的人的意见。

问候

解决方法

“效率”是指以最少的努力完成目标。所以什么是有效的取决于目标,你不能说“如果查询的执行时间少于十分之一秒,它就会有效地执行”。本质上,如果没有明显更快的方法来完成任务,则查询是有效的。

另一种更实用的方法是使查询足够高效。如果它按照您的要求执行并且执行时间和资源使用符合您的目的,请不要担心。您还应该考虑将查询优化到理论最优(例如,通过创建专门的索引)可能会对系统的其他部分产生负面影响(例如,数据修改变慢)。您想优化系统的整体性能和资源使用。

综上所述,应该清楚的是,没有简单的清单可以让您工作以确保效率。但我可以给你一个简短的 SQL 反模式列表,根据我的经验,这些反模式通常会导致查询效率低下:

  • 除非您确定需要,否则不要使用 DISTINCT。通常需要排序,对于大集合来说开销很大。

  • Avoid OR in WHERE conditions. 它往往会阻止使用索引。

  • 仅当您确定内连接不起作用时才使用外连接。数据库重新排列此类连接的可能性较小。

  • 使用规范化的数据模型。不要陷入在数据库中使用数组或 JSON 的陷阱。

  • 除非您需要消除重复项,否则请使用 UNION ALL 而不是 UNION。这类似于 DISTINCT

  • 使用 WHERE EXISTS (/* subquery */) 而不是 WHERE x IN (/* subquery */)IN 总是可以改写为 EXISTS,而 PostgreSQL 优化器更擅长处理后者。

这些规则应该被理解为经验法则。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。