mysql聯表更新 MySQL開發規範

2021-10-17 10:40:57 字數 1505 閱讀 8426

一、基礎規範

1) 使用innodb儲存引擎

2) 資料庫字符集使用utf8,校對字符集使用utf8_general_ci

3) 所有表、欄位都盡量新增注釋

4) 庫名、表名、欄位名使用小寫字母,禁止超過32個字元,須見名知意

5) 非唯一索引以 「idx_欄位1_欄位2」 命名,唯一索引必須以 「uniq_欄位1_欄位2」 命名

二、查詢規範

1) sql語句盡可能簡單,大的sql想辦法拆分成小的sql實現

2) 不要使用select * ,查詢具體要用到的字段

3) 禁止like做where條件(會全表掃瞄且不能用索引)

4) 除非必要,避免使用 != 等非等值操作符(會導致用不到索引)

5) where條件裡不要對列使用函式(不會引用索引)

6) 能確定返回結果只有一條時,使用limit 1(limit分頁注意效率,limit越大,效率越低)

7) 少用子查詢,改用join(子查詢要在記憶體裡建臨時表)

8) 多表join的字段,區分度最大的字段放在前面

9) in條件裡的資料數量要盡量少,超過200個用exist代替in

10) where字句中同乙個表的不同字段組合建議小於5組(否則考慮分表)

11) 禁止單條語句同時更新多個表

12) 事務要盡量簡單,整個事務的時間長度不要太長

三、表設計規範

1) 用decimal代替float和double儲存精確浮點數(精確資料)

2) 使用tinyint代替enum型別(便於遷移時相容)

3) 盡可能不使用text、blob型別(該資料型別不能設定預設值、不便於排序、不便於建立索引)

4) 同一意義的字段設計定義必須相同(便於聯表查詢)

5) 所有欄位均定義為not null(避免使用null欄位,null欄位很難查詢優化,null欄位的索引需要額外空間,null欄位的復合索引無效)

6) 表必須有主鍵,不使用更新頻繁的列做主鍵、盡量不使用字串列做主鍵,盡量使用非空的唯一自增鍵做主鍵

四、索引設計規範

1) 單錶索參數量不超過10個

2) 單個字段不要超過兩個索引

3) 新建的唯一索引必須不能和主鍵重複

4) 避免冗餘和重複索引

5) 盡量不要在頻繁更新的列上建立索引

6) 不在低基數列上建立索引,例如狀態、型別等

7) 不在索引列進行數**算和函式運算(參與了運算的列不會引用索引)

8) 復合索引須符合最左字首的特點建立索引(mysql使用復合索引時從左向右匹配)

9) 重要的sql中where條件裡的字段必須被索引

10) where條件裡的字段順序與索引順序無關,優化器會自動調整

11) 索引選擇性= cardinality / total rows,即基數 ÷ 資料行數,值越接近1說明使用索引的過濾效果越好

12) 建立索引時,務必先explain,檢視索引使用情況

原文:mysql開發規範

mysql聯表速查

select a.b.from a inner join join b on a.id b.id select a.b.from a left join b on a.id b.id select a.b.from a left join b on a.id b.id where b.id is n...

MySQL聯表查詢

顯示所有員工名字 emp.ename 員工工資 emp.sal 及所在部門的名字 dept.dname 笛卡爾積 emp num dept num 聯表查詢時一定要帶上關聯條件 select ename,sal,dname from emp,dept where emp.deptno dept.de...

mysql的聯表刪除

聯表刪除 1 從資料表t1 中把那些id值在資料表t2 裡有匹配的記錄全刪除掉 delete t1 from t1,t2 where t1.id t2.id 或delete from t1 using t1,t2 where t1.id t2.id 2 從資料表t1裡在資料表t2裡沒有匹配的記錄查詢...