首要原則:語句盡量簡單,不在數據庫做復雜運算,不用存儲過程、函數
數據庫難于擴展,擴展能力遠不如APP。
大消耗性能的SQL很容易對其他SQL產生影響。
MySQL優化器不足,處理復雜SQL時容易選擇錯誤執行計劃;
MySQL沒有SQL級并行、HashJoin、分析函數等特性,處理復雜SQL能力不強;在高并發的系統中,復雜SQL容易產生鎖問題
復雜SQL可拆分多個簡單SQL
select,insert一定要帶上字段名,盡量少用select *
select的數據長度可以影響order by排序算法。
增刪字段對程序的影響。
如果有大字段select真正需求的字段可以節省網絡IO開銷。
優化LIMIT分頁:不要用LIMIT start, offset,更高效方法可以找dba
select * from user limit 100000,1 對于MySQL來講是:先掃描100000行丟棄掉,再讀取一行。因此,不建議使用這種寫法來分頁。
不要在where語句后的索引列做運算或表達式,會導致用不了索引,示例如下:
禁用select for update、insert……select from、select *(必須明確給出需要字段)、insert TB values……(必須明確給出字段)、order by rand()語法。
它會擴大意向鎖范圍,較大程度影響數據庫的并發事務效率;
只用inner join或者left join;禁止用right join。表關聯的on必須有索引,只關聯需要表,只選擇需要的列
復雜查詢拆分簡單查詢;盡量小批量小語句分段執行;一個sql不要超過1G的binlog
拒絕3大類型sql:
1大SQL (BIG SQL) 2大事務 (BIG Transaction) 3大批量 (BIG Batch) 。合理拆分sql。小語句小事務好處:減少鎖、用上多cpu,緩存命中率高
大事務可以set auto_commit =0 關閉自動提交,但是拒絕濫用,會導致阻塞
注意SQL語句中數據類型隱式轉換的問題
查詢條件中使用‘’可能導致類型轉換無法使用索引,比如:int_col=‘0’,會導致隱式轉換無法正常使用索引
SQL規范
更新時間 2025-06-17 11:00:37
最近更新時間: 2025-06-17 11:00:37
分享文章
本文為您介紹開發過程中的SQL規范。