1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SQL審核 | 這里有 MySQL/Oracle 最常用的 SQL 開發(fā)規(guī)則

        共 2820字,需瀏覽 6分鐘

         ·

        2022-06-20 21:34

        作者:孫健

        SQLE 研發(fā)負責人,負責 SQLE 相關開發(fā);

        本文來源:原創(chuàng)投稿

        * 愛可生開源社區(qū)出品,原創(chuàng)內容未經授權不得隨意使用,轉載請聯(lián)系小編并注明來源。

        導讀

        今天給大家介紹一款最近火熱的SQL開發(fā)神器-SQLE,它是一款開源的SQL質量管理工具,被眾多企業(yè)廣泛使用,容易上手,能與CI/CD流程集成,并支持多種數據庫,能快速開發(fā)一套滿足自己公司使用的SQL開發(fā)規(guī)則。

        本文將介紹SQLE 對SQL開發(fā)規(guī)則的一些見解并給出常用的規(guī)則供大家參考。

        GitHub上的開源地址:https://github.com/actiontech/sqle

        規(guī)則分類

        根據日常SQL開發(fā)使用場景,大家可以在以下幾個方面考慮對SQL開發(fā)進行規(guī)范。當我們做好每個環(huán)節(jié),層層規(guī)范那么就可以避免大部分問題。當然SQLE對規(guī)則劃分隨著規(guī)則量的增加會進行更加細致的拆分。

        1. 庫表定義

        該類規(guī)則主要是針對庫表定義做了不同個維度包括表、字段、索引等的各方面屬性進行標準定義,標準規(guī)定的規(guī)則值可以根據自己業(yè)務場景進行配置,以滿足絕大部分表設計的規(guī)范,當庫表的定義滿足一定的規(guī)范后,這將是一個好的開始。

        2. 命名規(guī)范

        該類規(guī)則主要針對一些表名、字段名、索引名格式進行限制,主要作用還是作為統(tǒng)一命名標準提高可讀性,提高可維護性。
        3. 使用建議

        該類規(guī)則涉及一些公司的數據庫使用紅線,禁止使用來或避免一些潛在的使用上或者維護上的風險。

        4. 查詢

        該類規(guī)則主要是基于經驗式的對一些常見可能會影響性能的語句進行辨別,例如MySQL中左模糊查詢會導致無法走索引,但并不是說這就一定會慢,當我們在一開始就杜絕這種做法那么可以避免后期的性能下降。

        5. 動態(tài)審核
        該類規(guī)則主要是在審核SQL時需要借助數據庫的當前狀態(tài)包括數據量、當前服務器負載、數據庫提供的診斷數據(慢日志,TopSQL等)、解讀執(zhí)行計劃輸出來對當前運行SQL的狀態(tài)進行預警。
        Oracle規(guī)則

        SQL審核工具 SQLE 企業(yè)版近期推出了Oracle審核插件的第一個測試預覽版。我們采集了過往我們在客戶那碰到的問題和行業(yè)專家的建議,整理了一大批Oracle審核規(guī)則。這個版本我們從中挑選出現頻次最高的以及影響范圍最大一批規(guī)則加入到了Oracle審核插件中,這些規(guī)則能覆蓋大多數客戶的大多數場景,卻又不會對客戶使用產生額外的負擔。在后續(xù)的時間內,我們將推出的Oracle審核插件逐步完善規(guī)則的拼圖。接下來的內容將對高頻規(guī)則給出我們的理解。插件的本身開發(fā)之前已經做過介紹,開發(fā)文檔參考:https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/overview.html。

        1. 表建議使用主鍵;

        2. 表不建議使用外鍵;

        3. 索引個數建議不超過閾值;

        4. 表字段過多;

        5. 復合索引的列數量不建議超過閾值;

        6. 表不建議使用指定的字段類型;

        7. 表名、列名、索引名的長度不能大于指定字節(jié);

        8. 數據庫對象命名禁止使用關鍵字;

        9. 不建議使用select *;

        10. delete 和 update 語句,必須帶where條件;

        11. 避免使用 having 子句;

        12. 不推薦使用子查詢;

        13. 禁止除索引外的 drop 操作;

        14. 禁止使用視圖;

        15. 禁止使用觸發(fā)器;

        16. 單條SQL不建議過長;

        17. unique索引必須使用固定前綴;

        18. 普通索引必須使用固定前綴。

        19. 表關聯(lián)存在笛卡爾積;

        20. 表關聯(lián)嵌套循環(huán)層次過多;

        21. 表關聯(lián)個數過多;

        22. 對大表進行全表掃描;

        23. 存在索引執(zhí)行跳躍掃描;

        24. 對大索引執(zhí)行全掃描。

        以上規(guī)則可在SQLE企業(yè)版Oracle插件內體驗,下面是對應規(guī)則的產品截圖:


        MySQL規(guī)則

        MySQL的審核為SQLE內置默認支持的類型,以下的規(guī)則為完全開源的,可通過安裝SQLE進行體驗。
        1. 建議使用規(guī)定的數據庫排序規(guī)則

        2. BLOB 和 TEXT 類型的字段不可指定非 NULL 的默認值

        3. BLOB 和 TEXT 類型的字段不建議設置為 NOT NULL

        4. 不建議使用 BLOB 或 TEXT 類型

        5. char長度大于20時,必須使用varchar類型

        6. 不建議使用 ENUM 類型

        7. 不建議使用 SET 類型

        8. timestamp 類型的列必須添加默認值

        9. 列建議添加注釋

        10. 除了自增列及大字段列之外,每個列都必須添加默認值

        11. 精確浮點數建議使用DECIMAL

        12. 必須使用指定數據庫字符集

        13. 必須使用指定數據庫引擎

        14. 檢查DDL操作的表是否超過指定數據量

        15. 表建議添加注釋

        16. 禁止使用沒有where條件的sql語句或者使用where 1=1等變相沒有條件的sql

        17. 使用LIMIT分頁時,避免使用LIMIT M,N

        18. 單條insert語句,建議批量插入不超過閾值

        19. 查詢的掃描不建議超過指定行數(默認值:10000)

        20. 該查詢使用了文件排序

        21. 該查詢使用了臨時表

        22. 禁止使用全模糊搜索或左模糊搜索

        23. insert 語句必須指定column

        24. 建議使用UNION ALL,替代UNION

        25. delete/update 語句必須有l(wèi)imit條件

        26. 避免使用不必要的內置函數

        27. 使用JOIN連接表查詢建議不超過閾值

        28. 建議避免使用select for update

        29. 檢查DML操作的表是否超過指定數據量

        30. 避免對條件字段使用函數操作

        31. 條件字段存在數值和字符的隱式轉換

        32. 不建議對條件字段使用負向查詢

        33. 不建議對條件字段使用 NULL 值判斷

        34. 避免使用標量子查詢

        35. delete/update 語句不能有l(wèi)imit條件

        36. delete/update 語句不能有order by

        37. 不建議使用select *

        38. 存在多條對同一個表的修改語句,建議合并成一個ALTER語句

        39. 禁止使用自定義函數

        40. 禁止使用存儲過程

        41. 禁止使用觸發(fā)器

        42. 禁止使用視圖

        43. 不建議使用分區(qū)表相關功能

        44. 新建表必須加入if not exists create,保證重復執(zhí)行不報錯

        45. 事物隔離級別建議設置成RC

        46. 禁止除索引外的drop操作

        47. 數據庫名稱必須使用固定后綴結尾

        48. 普通索引必須使用固定前綴

        49. 表名、列名、索引名的長度不能大于指定字節(jié)

        50. 數據庫對象命名只能使用英文、下劃線或數字,首字母必須是英文

        51. 數據庫對象命名禁止使用保留字

        52. 建議主鍵命名為"PK_表名"

        53. unique索引名必須使用 IDX_UK_表名_字段名

        54. unique索引必須使用固定前綴

        55. 建議選擇可選性超過閾值字段作為索引

        56. 檢查DDL是否創(chuàng)建冗余的索引

        57. 索引創(chuàng)建建議

        58. 復合索引的列數量不建議超過閾值

        59. 禁止將blob類型的列加入索引

        60. 索引個數建議不超過閾值

        61. 檢查DDL創(chuàng)建的新索引對應字段是否已存在過多索引

        62. 建議創(chuàng)建約束前,先行創(chuàng)建索引

        63. 表必須有主鍵

        64. 主鍵禁止使用自增

        65. 主鍵建議使用自增

        66. 主鍵建議使用 bigint 無符號類型,即 bigint unsigned

        67. 禁止使用外鍵


        以上規(guī)則可在SQLE社區(qū)版產品內體驗,下面是對應規(guī)則的產品截圖:

        總結

        以上介紹了SQLE對于SQL開發(fā)規(guī)則的理解并給出常用的規(guī)則供大家參考,大家可以安裝SQLE進行體驗,GitHub上的開源地址:https://github.com/actiontech/sqle。
        瀏覽 88
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久成人免费鸡巴视频 | 日本三级韩国三级欧美三级 | chinese国产精品 | 少妇翘臀亚洲精品av图片 | 农村少妇野外A片WWw | 国产黄色一级电影 | 很黄很色的视频 | 五月深爱激情网 | 体内射精一区二区三区在线视频 | 国产91 白丝在线播放 |