MySQL使用規范建議
更新時間 2023-12-14 14:24:51
最近更新時間: 2023-12-14 14:24:51
分享文章
本文介紹MySQL的一些基本使用規范。
命名規范
- 表名和字段名應使用小寫字母或數字命名,禁止以數字開頭,禁止在兩個下劃線之間只包含數字。例如,"ctyun_admin"、"rds_config"、"level_name"。
- 避免使用MySQL的保留字,如"desc"、"range"、"match"、"delayed"等。
- 表名應使用單數名詞,而非復數名詞。
- 主鍵索引名稱以"pk"為前綴,唯一索引名稱以"uk"為前綴,普通索引名稱以"idx"為前綴。
- 在不同的庫或表中,確保存儲相同數據的列具有相同的名稱和類型,以確保數據一致性。
庫表設計規范
- 統一字符編碼和注釋:使用utf-8或utf8mb4編碼存儲和表示所有字符,確保表和字段都有明確的注釋信息。
- 控制表數據量:控制單表數據量的大小,單表數據量控制在800萬行以內。可以采用歷史數據歸檔和分庫分表的方式來控制單表數據的大小。
- varchar為可變長字符串,長度不要超過5000,如果存儲長度超過該值,使用text,并獨立標出來。
- 對于幾乎相等長度的字符串存儲,應使用定長字符串類型char。
- 關聯列的處理:將經常一起使用的列盡量放在同一個表中,避免過多的關聯操作,提高查詢效率。
- 使用
datetime和timestamp類型存儲時間是比使用字符串更好的方法,它們提供了更準確和高效的時間處理方式。 - 表中應包含三個必備字段:id(主鍵)、create_time(創建時間)、update_time(更新時間)。
- 盡量避免大事務:盡量避免使用大事務,以減少長時間鎖定資源和提高并發性能。
索引設計規范
- 單表的索引數量最好不超過5個,單個索引中的字段數最好不超過5個,避免因長時間鎖定數據導致內存、連接消耗過多等問題。
- 確保索引字段長度固定且不宜過長。過長的索引字段會占用更多磁盤空間,并影響索引的性能。
- 避免冗余索引,即存在兩個索引 (a,b) 和 (a) 的情況,若查詢條件為a列,只需建立 (a,b) 索引即可,不需要額外建立 (a) 索引。
- 對于高過濾性的字段,考慮在其上加索引。高過濾性字段的索引可以提高查詢效率。
- 注意選擇性和數據類型。選擇性高的字段和合適的數據類型可以提高索引效果和查詢性能。
- 合理利用覆蓋索引來減少I/O開銷,通過創建包含所需列的復合索引,避免回表操作。
開發使用規范
- 在處理復雜運算或業務邏輯時,優先考慮在業務層實現,而非在SQL中進行。合理選擇分頁方式以提高分頁效率,避免使用跳躍式分頁。
- 在事務中使用更新語句時,盡量基于主鍵或唯一鍵進行操作,避免產生間隙鎖和死鎖。
- 盡量避免使用外鍵和級聯更新,應該在應用層處理外鍵關系。
- 減少使用in操作,集合元素數量不應超過1000個。
- 對于批量數據操作,可以適度采用批量SQL語句,例如使用insert into...values語句批量插入數據,但不宜超過100個。
- 避免使用存儲過程,存儲過程難以調試、擴展和移植。
- 避免使用觸發器、事件調度器和視圖來實現業務邏輯,這些應該在業務層處理,避免對數據庫產生邏輯依賴。
- 避免使用隱式類型轉換,了解類型轉換規則,確保比較操作符兩邊的數據類型一致,避免影響查詢性能。
- 在一個事務中,盡量控制SQL語句的數量,不超過5個,避免長時間鎖定數據、內存緩存問題和連接消耗過多。
- 利用覆蓋索引來進行查詢操作,避免回表。