sql - SQL 中的过早优化是否为 "evil",就像它在过程编程语言中一样?

标签 sql optimization complexity-theory

我目前正在学习 SQL,并且我读过连接和子查询可能会破坏性能。我(有点)了解过程编程语言中关于算法复杂性的理论,并在编程时尽量注意这一点,但我不知道不同的 SQL 查询的成本有多高。我正在决定是应该花时间了解 SQL 性能,还是在查询运行缓慢时才注意到这一点。那么我的基本问题是:SQL 的过早优化和过程语言一样邪恶吗?

作为补充信息,我在一个环境中工作,在大多数情况下,高性能不是问题,我必须使用的最大表有大约 15 万行。

这是我在说“邪恶”时引用的唐纳德·克努斯 (Donald Knuth) 的话:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.

最佳答案

我想说一些关于性能的一般概念是必须的:它会阻止您编写可能损害您的应用程序的非常糟糕的查询(即使您的表中没有数百万行)。

它还将帮助您设计您的数据库,使其更加面向官方:例如,您将对放置索引的位置有一些想法。

但是您不应该将性能作为首要目标:第一件事是拥有一个有效的应用程序;然后,如果需要,您将对其进行优化(不过,在开发时了解一些性能概念将有助于您拥有一个更易于优化的应用程序)。

请注意,我不会说“对性能有概念”是“过早优化”,只要您不只是“优化”,而只是“正确编写”;我宁愿称其为有助于编写质量更好的代码的良好实践;-)

关于sql - SQL 中的过早优化是否为 "evil",就像它在过程编程语言中一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2264373/

相关文章:

javascript - 微优化,现代浏览器是否对其进行了优化?

big-o - 带模的时间复杂度分析

mysql - 使用 APEX 创建 CRUD 应用程序

sql boolean 0/1表示true或False

在 Windows 7 中启动 db2sampl 时出现 sql1205n

java - 两个相关 for 循环的复杂度,外循环的复杂度为 log n

r - 为什么 nlogn 很难反转?

mysql查询以选择第1列中的最后一个值和第2列中最后5行的最大值

javascript - 如何优化此 HTML 以在浏览器中更快地呈现?

vb.net - 使用 SyncLock 的正确方法(一般)