mysql使用規範-SQL設計

(1)使用prepared statement,能夠提高性能並避免SQL注入。數據庫

(2)使用IN代替OR。SQL語句中IN包含的值不該過多,應少於1000個。ide

(3)禁止隱式轉換。數值類型禁止加引號;字符串類型必須加引號。函數

(4)避免使用JOIN和子查詢。必要時推薦用JOIN代替子查詢。性能

(5)禁止在MySQL中進行數學運算和函數運算。索引

(6)減小與數據庫交互次數,儘可能採用批量SQL語句。事務

(7)拆分複雜SQL爲多個小SQL,避免大事務。字符串

(8)獲取大量數據時,建議分批次獲取數據,每次獲取數據少於2000條,結果集應小於1M。數學

(9)使用UNION ALL代替UNION。it

(10)統計行數使用COUNT(*)。class

(11)SELECT只獲取必要的字段,禁止使用SELECT *。

(12)SQL中避免出現now()、rand()、sysdate()、current_user()等不肯定結果的函數。

13)INSERT語句必須指定字段列表,禁止使用 INSERT INTO TABLE()。

(14)禁止單條SQL語句同時更新多個表。

(15)禁止使用存儲過程、觸發器、視圖、自定義函數等。

(16)建議使用合理的分頁方式以提升分頁效率。

(17)禁止在從庫上執行後臺管理和統計類功能的QUERY,必要時申請統計類從庫。

(18)程序應有捕獲SQL異常的處理機制,必要時經過rollback顯式回滾。

(19)重要SQL必須被索引:update、delete的where條件列、order by、group by、distinct字段、多表join字段。

(20)禁止使用%前導查詢,例如:like 「%abc」,沒法利用到索引。

(21)禁止使用負向查詢,例如 not in、!=、not like。

(22)使用EXPLAIN判斷SQL語句是否合理使用索引,儘可能避免extra列出現:Using File Sort、Using Temporary。

(23)禁止使用order by rand()。

(24)禁止使用REPLACE INTO和INSERT ON DUPLICATE KEY UPDATE的語句類型,除非業務場景特殊且DBA評估經過。

相關文章
相關標籤/搜索