恢復內容開始 設計表的時候 1. 不同的表涉及同一個公共意義欄位不要使用不同的數據類型(可能導致索引不可用,查詢結果有偏差) 2. 不要一張表放太多的數據 主表20~30個欄位 其他表最好不超過20個 3. 最好不要有為Null的列,原因:https://mp.weixin.qq.com/s/U4R ...
---恢復內容開始---
設計表的時候
1. 不同的表涉及同一個公共意義欄位不要使用不同的數據類型(可能導致索引不可用,查詢結果有偏差) 2. 不要一張表放太多的數據 主表20~30個欄位 其他表最好不超過20個 3. 最好不要有為Null的列,原因:https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg 4. 如果存儲的字元串長度幾乎相等,使用char定長字元串類型 5. varchar是可變長字元串,不預先分配存儲空間,長度不要超過5000,如果存儲長度大於此值,定義欄位類型為text,獨立出來一張表, 用主鍵來對應,避 免影響其他欄位索引效率; 6. 小數類型為 decimal,禁止使用 float 和 double;float 和 double 在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不 正確的結果。如果存儲的數據範圍超過 decimal 的範圍,建議將數據拆成整數和小數分開存儲。 7. 禁用保留字,如desc、range、match、delayed 等,請參考 MySQL 官方保留字
查詢表的時候
1. 最好不要使用聯表查詢(風險不可控)【理論上禁止】 2. 不要在欄位當中進行函數運算【禁止】 3. 儘量不要使用now()函數進行查詢【禁止】 4. 查詢時只查詢用到的欄位,不要使用 “*”查詢 說明:1)增加查詢分析器解析成本。2)增減欄位容易與 resultMap 配置不一致。 5. 刪除全表數據的時候用truncate而不是delete 6. 儘量不要使用模糊匹配 '%abc%'【理論上禁止】 7. sql語句不要寫的過於複雜,邏輯判斷儘量在記憶體中完成 8. 不要加入觸發器 9. 使用explain查看執行計劃 加索引的時候 1. 添加索引的欄位一定要有很好的區分度【cardinality】 2. 更新數據的時候最好使用主鍵作為更新條件 3. 加入聯合索引要把區分度高的欄位放在前面 4. 不常訪問的列不要加索引 5. 長字元串不要加索引,如果一定要加,選取字元串的前n位加上。(n根據實際情況設定,經驗值不會超過20) 6. 唯一索引名為 uk_欄位名;普通索引名則為 idx_欄位名;---恢復內容結束---
設計表的時候
1. 不同的表涉及同一個公共意義欄位不要使用不同的數據類型(可能導致索引不可用,查詢結果有偏差) 2. 不要一張表放太多的數據 主表20~30個欄位 其他表最好不超過20個 3. 最好不要有為Null的列,原因:https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg 4. 如果存儲的字元串長度幾乎相等,使用char定長字元串類型 5. varchar是可變長字元串,不預先分配存儲空間,長度不要超過5000,如果存儲長度大於此值,定義欄位類型為text,獨立出來一張表, 用主鍵來對應,避 免影響其他欄位索引效率; 6. 小數類型為 decimal,禁止使用 float 和 double;float 和 double 在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不 正確的結果。如果存儲的數據範圍超過 decimal 的範圍,建議將數據拆成整數和小數分開存儲。 7. 禁用保留字,如desc、range、match、delayed 等,請參考 MySQL 官方保留字