重构SQL
是否有任何形式化的SQL重构技术类似于此代码列表重构SQL,sql,refactoring,Sql,Refactoring,是否有任何形式化的SQL重构技术类似于此代码列表 我目前正在为一个特定的报告进行一个大规模的查询,我确信这里有很多重构的空间,我只是一点一点地摸索。我从来没有发现过。我主要从事SQL Server工作,标准技术包括: 参数化可能更改的硬编码值,以便缓存查询 查看执行计划,检查大怪物在哪里,并尝试更改它们 索引优化向导,但请注意,您不会因为对此所做的任何更改而在其他地方造成混乱 如果您仍处于困境,许多报告并不依赖于100%的实时数据-请尝试按计划(如隔夜)预先计算部分数据或全部数据。我从未见过像您
我目前正在为一个特定的报告进行一个大规模的查询,我确信这里有很多重构的空间,我只是一点一点地摸索。我从来没有发现过。我主要从事SQL Server工作,标准技术包括: 参数化可能更改的硬编码值,以便缓存查询 查看执行计划,检查大怪物在哪里,并尝试更改它们 索引优化向导,但请注意,您不会因为对此所做的任何更改而在其他地方造成混乱
如果您仍处于困境,许多报告并不依赖于100%的实时数据-请尝试按计划(如隔夜)预先计算部分数据或全部数据。我从未见过像您提供的示例那样详尽的列表 我见过的重构sql最有效的方法是使用。 它允许您将sql分解为可管理的部分,这些部分通常可以独立测试。此外,它还可以重用查询结果,有时可以使用系统临时表。这是非常值得研究的 这里有一个愚蠢的例子
WITH
mnssnInfo AS
(
SELECT SSN,
UPPER(LAST_NAME),
UPPER(FIRST_NAME),
TAXABLE_INCOME,
CHARITABLE_DONATIONS
FROM IRS_MASTER_FILE
WHERE STATE = 'MN' AND -- limit to Minne-so-tah
TAXABLE_INCOME > 250000 AND -- is rich
CHARITABLE_DONATIONS > 5000 -- might donate too
),
doltishApplicants AS
(
SELECT SSN, SAT_SCORE, SUBMISSION_DATE
FROM COLLEGE_ADMISSIONS
WHERE SAT_SCORE < 100 -- Not as smart as the average moose.
),
todaysAdmissions AS
(
SELECT doltishApplicants.SSN,
TRUNC(SUBMISSION_DATE) SUBMIT_DATE,
LAST_NAME, FIRST_NAME,
TAXABLE_INCOME
FROM mnssnInfo,
doltishApplicants
WHERE mnssnInfo.SSN = doltishApplicants.SSN
)
SELECT 'Dear ' || FIRST_NAME ||
' your admission to WhatsaMattaU has been accepted.'
FROM todaysAdmissions
WHERE SUBMIT_DATE = TRUNC(SYSDATE) -- For stuff received today only
我喜欢的另一件事是,这个表单允许您将过滤和加入分离开来。因此,您可以经常复制子查询,并单独执行它们以查看与之关联的结果集。不太涉及技术,但这个问题可能会帮助您找到SQL重构工具:
有一本关于这个主题的书:。我没有读过,但它在亚马逊上有4.5/5颗星,由Scott Ambler合著,这两个都是好兆头。我不是真的知道,但我一直想找时间看看这本书,这本书看起来确实很有趣,虽然我感觉它更多的是重构数据库设计,而不是针对现有设计的查询。我可能是错的。当被问到这个问题时,这是一个相当新的参考。它有一章是关于这个主题的。如果他们在SQL 2005+上,那就好了。在此之前,您不能与语句一起使用,因此临时表是您的朋友。注意,对于测试,最好是以temp启动,并在您满意时转换为withs,这样您就可以将构建的表留在内存中等待,而不必在每次检查时单独重新构建它们。您还可以使用视图和内联表值函数,而不是CTE。听起来您在谈论优化改进性能而不是重构改进设计。这也是来自Martin Fowler签名系列,这是另一个好迹象——我不知道有谁比Fowler在推广重构作为干净代码技术方面做得更多。