SQL 編碼規範
1. 必須對錶起別名,方便調查表用了哪些列
比如 select owner,object_id,name from a,b where a.id=b.id;
如果不對錶取別名,我怎麼知道你訪問的列是哪個表的。如果SQL幾百行,如果SQL表關聯很多,去死吧。
2. 資料庫物件 命名
表 字首/字尾 T_XXX
檢視 字首/字尾 V_XXX
物化檢視 字首/字尾 MV_XXX
索引 IDX_列名
特殊表
資料倉儲 事實表 _FACT
資料倉儲 維度表 _DIM
業務中間表 _TMP
日誌表 _LOG
才用這種命名規範,方便不熟悉業務的DBA,開發人員更快的上手
3. 嚴禁標量子查詢(分頁可以寫)
select (select ... from a where a.id=b.id) from b; ---這種就叫標量子查詢
假如 b 返回100w 那麼 a可能被掃描 100w次 然後你懂的 死了
標量子查詢 全部改寫為 select ... from a left join b .....
4. 嚴禁sql套自定義函式,包,儲存過程
道理跟 標量子查詢一樣
5. 嚴禁檢視中select包含ROWNUM create or replace view ....select rownum
影響謂詞推入+檢視合併
6. 嚴禁檢視 裡面有 order by
干擾執行計劃
7. 嚴禁檢視套用超過2個 ,因為最裡面的檢視改了可能影響最外面的 高內聚 低耦合
如果最裡面的檢視出問題,那麼呼叫這個檢視的SQL全出問題,改寫程式碼都改死你
8. in exists ,not in not exists 改寫為 with as (子查詢)
.?
9. 分頁不能有 distinct, group by ,union /union all,order by 只能一個表
.?
10. 關聯更新,改寫為merge 或者改寫為利用 rowid更新
11. 禁止對join列用函式 比如 where trunc(時間)=b.時間
12.注意隱式轉化
比如 select owner,object_id,name from a,b where a.id=b.id;
如果不對錶取別名,我怎麼知道你訪問的列是哪個表的。如果SQL幾百行,如果SQL表關聯很多,去死吧。
2. 資料庫物件 命名
表 字首/字尾 T_XXX
檢視 字首/字尾 V_XXX
物化檢視 字首/字尾 MV_XXX
索引 IDX_列名
特殊表
資料倉儲 事實表 _FACT
資料倉儲 維度表 _DIM
業務中間表 _TMP
日誌表 _LOG
才用這種命名規範,方便不熟悉業務的DBA,開發人員更快的上手
3. 嚴禁標量子查詢(分頁可以寫)
select (select ... from a where a.id=b.id) from b; ---這種就叫標量子查詢
假如 b 返回100w 那麼 a可能被掃描 100w次 然後你懂的 死了
標量子查詢 全部改寫為 select ... from a left join b .....
4. 嚴禁sql套自定義函式,包,儲存過程
道理跟 標量子查詢一樣
5. 嚴禁檢視中select包含ROWNUM create or replace view ....select rownum
影響謂詞推入+檢視合併
6. 嚴禁檢視 裡面有 order by
干擾執行計劃
7. 嚴禁檢視套用超過2個 ,因為最裡面的檢視改了可能影響最外面的 高內聚 低耦合
如果最裡面的檢視出問題,那麼呼叫這個檢視的SQL全出問題,改寫程式碼都改死你
8. in exists ,not in not exists 改寫為 with as (子查詢)
.?
9. 分頁不能有 distinct, group by ,union /union all,order by 只能一個表
.?
10. 關聯更新,改寫為merge 或者改寫為利用 rowid更新
11. 禁止對join列用函式 比如 where trunc(時間)=b.時間
12.注意隱式轉化
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17086096/viewspace-2058193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 5. SQL 編寫規範SQL
- 程式碼規範之前端編寫碼規範前端
- stylus編碼規範
- html編碼規範HTML
- Pear 編碼規範
- CSS編碼規範CSS
- Javascript編碼規範JavaScript
- python編碼規範Python
- .Net Core 編碼規範
- 前端安全編碼規範前端
- WEB前端編碼規範Web前端
- 常見編碼規範
- .Net編碼規範整理
- HTML編碼規範建議HTML
- 前端開發編碼規範前端
- PHP編碼風格規範PHP
- Java語言編碼規範Java
- PHP – 編碼規範 v1.0PHP
- 前端單體編碼規範整理前端
- Uber Go 語言編碼規範Go
- 編寫shell指令碼的規範指令碼
- 前端設計與編碼規範前端
- Python基礎:編碼規範(4)Python
- 編碼規範 - 養成良好的Java編碼習慣Java
- 談談編碼風格與規範
- 我的編碼習慣 —— Controller規範Controller
- ReactNative專案實踐編碼規範React
- Kitty-Cloud中的編碼規範Cloud
- 上位機程式設計編碼規範程式設計
- 資料庫規範之SQL規範寫法資料庫SQL
- python編碼規範以及推導式的編寫Python
- 嵌入式c語言編碼規範C語言
- 阿里巴巴編碼規範(Java)證明阿里Java
- Java語言編碼規範(Java Code Conventions)Java
- HTML編寫規範HTML
- SQL書寫規範(通用)SQL
- PHP 規範 - Symfony 程式碼規範PHP
- 個人總結——全面的『Python編碼規範』Python
- 『手撕Vue-CLI』編碼規範檢查Vue