簡體   English   中英

重構 SQL

[英]Refactoring SQL

是否有類似的重構這份名單SQL任何正式的技術在這里也就是代碼?

我目前正在對特定報告進行大量查詢,我確信這里有很多重構空間,我只是一點一點地絆倒自己。

我從未見過像您提供的樣本那樣詳盡的清單。

我見過的最有效的 sql 重構方法是使用with 語句 它允許您將 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% 的實時數據 - 嘗試按計划(例如隔夜)預先計算部分數據(或全部)。

與技術無關,但這個問題可能會幫助您找到 SQL 重構工具:

有沒有重構SQL的工具,有點像SQL的ReSharper

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM