是否有任何正式的技术可以用来重构 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
我喜欢它的另一个原因是,这种形式允许您将过滤与连接分开。因此,您经常可以复制子查询并单独执行它们,以查看与之相关的结果集。
有一本关于这个主题的书:"重构数据库"。虽然我没有阅读过它,但它在亚马逊上得到了4.5/5颗星,并由Scott Ambler共同撰写,这都是好的迹象。
我从未发现过。我主要做的是SQL Server工作,标准技术包括:
如果你还是卡住了,许多报告并不依赖于100%实时数据 - 尝试按时间表预先计算部分数据(或全部数据),例如在夜间。