亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

格式化 SQL 來提高效率

2024-07-21 02:47:16
字體:
來源:轉載
供稿:網友
格式化 SQL 來提高效率

本文由伯樂在線-cucr翻譯,黃利民校稿。未經許可,禁止轉載!英文出處:msiman.ga。歡迎加入翻譯小組。

背景

已格式化的SQL并不比未格式化SQL運行地更快。數據庫可能真的不太在意你是否把逗號放在每個字段名稱的前面或后面。為幫助你更理智和成為一名高效的SQL編寫者,我建議你遵循一些格式化的指導方針。在這篇文章里,我將分享如何格式化SQL語句來提高工作效率。我對生產力這樣定義,能夠從SQL得到準確的結果,同時代碼容易理解,修改和調試。我只會專注于SELECT語句,它占到我編寫SQL的99%。格式化SQL代碼是非常個性的選擇,我很清楚,不同的人將鐘愛他們自己的格式化規則。

問題樣例

這是一個典型的SQL使用場景,業務上需要這樣的報表,它的數據在三個表中,分別是customer、sales 和 location。在2015年1月,報表需要顯示位于每一個郵政編碼區域的客戶數量和總銷售額。這應該是一個簡單的SQL語句,它連接三個表。

數據可能有問題

雖然SQL很容易,確保結果準確才是真正的挑戰,以下是許多可能的原因中的一個,包括:

  • 數據可能來自不同數據源。這意味著在不同的表中的無法保證引用完整性。簡單說,你不能假定 customer 表上的所有郵政編碼是有效的,同時在 location 表上也存在該問題。
  • 存取客戶數據的應用程序,可能沒有適當的數據驗證。可能已經存入不正確的郵政編碼。
  • postcode 表可能沒有所有郵政編碼。新的郵政編碼代碼可能被引入,但自從上次更新還沒有添加到表中。

第一原則

對我來說,格式化SQL更多地是從SQL獲得正確的結果,因為它有明確的SQL,很容易跟蹤。我做的第一件事編寫獲取客戶總數的語句。這是個數字,我將在寫完整個語句后進行對比。

我寫的第一條語句是:

1234SELECTCOUNT(DISTINCT cust_id) AS count_customersFROMcustomers

Result:

count_customers
“10&PRime;

這個查詢很重要,因為它遵循了第一原則(外部鏈接)。因為沒有SQL連接,因此沒有依賴,我知道這是正確的客戶數量。我總是記下結果,因為我總是需要拿這個數字對比,在這篇文章是 10。

接下來我要做的就是添加必要的字段和表到這個查詢。我強調添加這個詞,因為根據我遵循的格式化規則,我可以注釋掉查詢的元素來得到和我應用第一原則時相同的結果。下面是我最終的格式化查詢,使用格式化查詢的方式。

格式化SQL

下面是我推薦的格式化的SQL,緊接后面是我進行的格式化選擇的理由。

1234567891011121314151617SELECT0,c.cust_post_code,p.location ,COUNT(DISTINCT c.cust_id) number_customers,SUM(s.total_amount) AS total_salesFROMcustomers cJOIN post_codes p ON c.cust_post_code = p.post_code JOIN sales s ON c.cust_id = s.cust_idWHERE1=1AND s.sales_date BETWEEN '2015-01-01' AND '2015-01-31'--AND s.order_id = 5GROUP BYc.cust_post_code,p.location
總是使用表別名

這將會在你的SQL中得到證實。如果你不為參與查詢的每個字段使用別名(外部鏈接),有時候在后期,具有相同名稱的字段添加到查詢中使用的某個表中。你的查詢和你的報表將出現一個錯誤(發現重復的字段名)。

逗號在字段前

當調試/測試我的查詢時,這讓我能輕易進行字段注釋和取消注釋,不需要在查詢中修改任何其他行,以確保逗號在正確的地方。我看過一些文章,博主為了大事化小不得不改變另一個查詢的一部分,以確保逗號是正確的,但是你如果花大部分時間編寫和測試 SQL 語句,這是一個大問題。你按這種方式將會更有效率。這個在 SELECT 和 GROUP BY 查詢部分都工作地很好。

我在開發環境使用 SELECT 0,同時傾向于進入生產環境之前刪除它。它允許我把逗號放在所有字段前。如果沒有 0,我想注釋掉c.cust_post_code,它是第一個字段,我就必須注釋掉第二個字段前面的逗號。我也會在 GROUP BY 子句做同樣的事情。0 可以消除這個額外的工作。

在新的一行JOIN

將JOIN語句放在一個新行的優勢包括:

  • 通過僅僅向下滾動JOIN語句列表就可以很容易地查看查詢中所涉及到的所有表。
  • 使用 JOIN,相比將所有表和關系表達式都列在 WHERE 語句中,它可以將所有關系邏輯保持在一個地方。JOIN 語句也許不可能總是遵循在一行,但至少會在一個地方。
  • 注釋掉 JOIN 會相對比較容易。在調試時,當你想知道哪個 JOIN 導致數據差異時,將很有用。
列模式編輯

在處理大量的字段時,列模式編輯非常方便。下面是我的第一次動畫GIF展示,顯示你如何注釋掉所有非聚合字段。在實踐中我使用

列模式編輯(外部鏈接),不僅僅是注釋字段還包括:

  • 大量創建索引
  • 在使用 UNION 語句時帶有長的字段列表
  • 注 釋GROUP BY 子句長的字段列表

測試查詢結果

我不得不使用外連接來列出所有客戶,因為并不是所有客戶的郵政編碼在 location 表中都能找到對應郵政編碼。我能夠做到這一點,通過在我的查詢中反復包括和排除不同的字段和表,確保我能夠與基于第一原則的最早查詢保持一致。

123456789101112131415161718SELECT0,c.cust_post_code--,p.location ,COUNT(DISTINCT c.cust_id) number_customers,SUM(s.total_amount) AS total_salesFROMcustomers c--LEFT OUTER JOIN post_codes p ON c.cust_post_code = p.post_code JOIN sales s ON c.cust_id = s.cust_idWHERE1=1AND s.sales_date BETWEEN '2015-01-01' AND '2015-01-31'--AND c.cust_post_code = 2000--AND p.post_code = 200GROUP BYc.cust_post_code--,p.location

對我來說,像這樣格式化SQL,意味著我不必編寫為了檢查數據做單獨的測試。通過注釋掉一些行,我能使用第一原則來測試數據的準確性。這可以提高我的效率,以及報表的準確性。

關于作者:cucr
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线电影欧美日韩一区二区私密| 国产视频精品免费播放| 久久天天躁夜夜躁狠狠躁2022| 国产免费一区二区三区在线观看| 国内伊人久久久久久网站视频| 亚洲综合色激情五月| 一本色道久久综合狠狠躁篇怎么玩| 欧美主播福利视频| 欧美猛交ⅹxxx乱大交视频| 日韩乱码在线视频| 亚洲精品av在线播放| 国产精品精品久久久久久| 精品久久久久久亚洲国产300| 国产精品免费在线免费| 日韩免费av在线| 欧美激情xxxx性bbbb| 97精品欧美一区二区三区| 欧洲午夜精品久久久| 中文字幕一区二区三区电影| 欧美日本中文字幕| 91九色单男在线观看| 久久影视电视剧免费网站| 92看片淫黄大片欧美看国产片| 日韩免费高清在线观看| 97久久精品国产| 国产裸体写真av一区二区| 福利精品视频在线| 亚洲午夜色婷婷在线| 亚洲精品在线91| 成人黄色免费网站在线观看| 色噜噜国产精品视频一区二区| 精品一区二区三区三区| 国产成人精品电影| 色噜噜狠狠狠综合曰曰曰88av| 亚洲成人久久网| 日韩亚洲精品电影| 91精品国产成人| 亚洲精品欧美日韩| 中文字幕av一区| 国产一区二区日韩精品欧美精品| 伊人久久男人天堂| 久久精品国产成人| 91美女片黄在线观看游戏| 日本一区二三区好的精华液| 亚洲精品永久免费精品| 国产成人亚洲综合青青| 国产精品成人av性教育| 亚洲精品一区二区久| 国产精品久久久久久五月尺| 亚洲在线免费看| 国产香蕉精品视频一区二区三区| 国产一区二区成人| 欧美在线播放视频| 国产成人精品综合久久久| 萌白酱国产一区二区| 欧美成人自拍视频| 色婷婷av一区二区三区久久| 国内精品视频久久| 5278欧美一区二区三区| 国产亚洲欧美日韩美女| 亚洲一区二区三区香蕉| 欧美视频一二三| 成人中文字幕在线观看| 国产婷婷色综合av蜜臀av| 亚洲男人第一网站| 国产欧美日韩中文| 欧美高清电影在线看| 国产精品亚洲综合天堂夜夜| 亚洲精品视频在线观看视频| 成人午夜高潮视频| 欧美亚洲国产视频| 色偷偷偷亚洲综合网另类| 伊人久久大香线蕉av一区二区| 91在线免费看网站| 国产在线视频一区| 91亚洲精华国产精华| 日韩欧美在线字幕| 91欧美激情另类亚洲| 亚洲国产美女精品久久久久∴| 在线日韩第一页| 久久久噜噜噜久久久| 亚洲xxx自由成熟| 成人免费视频a| 国产成人精品一区| 国产性猛交xxxx免费看久久| 久久久久国色av免费观看性色| 国产九九精品视频| 97国产精品久久| 在线观看亚洲视频| 亚洲精品一区二区网址| 92版电视剧仙鹤神针在线观看| 亚洲欧美日韩一区二区三区在线| 九九精品在线观看| 精品自拍视频在线观看| 久久久久国产精品免费网站| 97精品视频在线| 成人免费福利在线| 91精品视频网站| 欧美日韩在线另类| 一本一本久久a久久精品牛牛影视| 丝袜情趣国产精品| 亚洲视频一区二区三区| 久久亚洲春色中文字幕| 中文在线不卡视频| 日韩中文字幕视频| 茄子视频成人在线| 日韩在线视频一区| 亚洲精品suv精品一区二区| 国产视频在线一区二区| 日韩精品免费在线播放| 精品国产网站地址| 欧美成人精品影院| 97视频在线观看免费高清完整版在线观看| 久久久久久成人精品| 欧美在线免费观看| 亚洲激情在线视频| 最近中文字幕mv在线一区二区三区四区| 国产成人自拍视频在线观看| 在线视频欧美性高潮| 日韩中文视频免费在线观看| 亚洲老板91色精品久久| 国产欧美一区二区| 久久久精品国产一区二区| 97香蕉超级碰碰久久免费的优势| 欧美成人在线免费视频| 国产精品久久久久久久久久久久| 国产三级精品网站| 在线亚洲午夜片av大片| 伊人久久综合97精品| 日韩欧美中文第一页| 久久久国产一区二区三区| 久久久精品在线观看| 黑人巨大精品欧美一区二区| 国产丝袜高跟一区| 日韩av不卡在线| 欧美激情aaaa| 国产亚洲欧美日韩一区二区| 国产91色在线|免| 91最新在线免费观看| 国产福利精品av综合导导航| 日韩欧美精品网址| 国产精品久久久久999| 九九热最新视频//这里只有精品| 国色天香2019中文字幕在线观看| 国产日韩欧美一二三区| 欧美日韩精品在线观看| 国产精品久久久久一区二区| 福利精品视频在线| 成人啪啪免费看| 日韩av在线导航| 精品国内自产拍在线观看| 中文字幕久久精品| 久久精品欧美视频| 欧美精品少妇videofree| 亚洲精品电影网在线观看| 色偷偷偷综合中文字幕;dd| 奇米四色中文综合久久| 国产主播在线一区| 日韩女优人人人人射在线视频| 色综合伊人色综合网站| 日本精品性网站在线观看| 久久久精品中文字幕| 亚洲精品动漫久久久久| 色综合亚洲精品激情狠狠|