高性能可擴展MySQL數據庫設計及架構優化 電商項目(筆記)


准備

  mysql5.7  + sqlyog

數據庫開發規范的制定

  數據庫必須使用小寫字母並用下划線分割(見名知意,最好不超過32字符)

  禁止使用mysql保留關鍵字(如有,``包裹),去http://dev.mysql.com/doc/refman/5.7/en/keywords.html

  臨時庫表必須以tmp為前綴並以日期為后綴(tmp_)

  備份庫和庫,必須以bak為前綴,日期為后綴(bak_)

  所有存儲相同數據的列名和列類型必須一致。(在多個表中的字段如user_id)

  mysql5.5之前默認的存儲的引擎是myisam,沒有特殊要求,所有的表必須使用innodb(支持失誤,行級鎖,高並發下性能更好)

  數據庫和表的字符集統一使用utf8【要統一,避免由於字符集轉換產生的亂碼】。漢字utf8下暫3個字節

  表和字段備注

  盡量控制單表數據量的大小在500w以內(並不是mysql數據庫的限制,這種限制取決於存儲設置和文件系統,可以使用歷史數據歸檔,分庫分表來實現)。

 

注意:

  謹慎使用mysql分區表(分區表在物理上表現為多個文件,在邏輯上表現為一個表)。

  謹慎選擇分區鍵,跨分區查詢效率可能更低

  建議使用物理分表的方式管理大數據

  盡量做到冷熱數據分離,減小表的寬度(mysql限制最多存儲4096列,行數沒有限制,但是每一行的字節總數不能超過65535)【列限制好處:減少磁盤io,避免讀入無用的冷數據】

  禁止在表中建立預留字段(無法確認存儲的數據類型,無法選擇合適的類型)

  禁止在數據中存儲圖片,文件二進制數據

  禁止在線上做數據庫壓力測試

  禁止從開發環境,測試環境直接連生產環境數據庫

索引設計規范

  對查詢性能非常重要(雙刃箭)

  限制每張表上的索引數量,建議單表索引不超過5個(索引會增加查詢效率,但是會降低插入和更新的速度)

  禁止給表中的每一列都建立單獨的索引

  每個innodb表必須有一個主鍵(不能使用更新頻繁的列作為主鍵),選擇自增id

  

  常見索引建立建議:

    select ,update ,delete 語句的where從句的列

    包含order by ,group by ,distinct中的字段

    多表join的關聯列

  如何選擇索引列的順序:

    區分度最高的列放在聯合索引的最左側

    盡量把字段長度小的列放在聯合索引的最左側

注意:

  避免建立冗余索引和重復索引

  盡量避免使用外鍵

數據庫字段設計規范

  優先選擇符合存儲需要的最小數據類型

  優先使用無符號的整形來存儲

  優先選擇存儲最小的數據類型(varchar(N),N代表的是字符數,而不是字節數,N代表能存儲多少個漢字)

  避免使用text,blob類型

  盡量把所有的列定義為not null (索引null 需要額外的空間來保存,所以需要暫用更多的內存)

  使用timestamp或datetime類型來存儲時間

  同財務相關的金額數據,采用decimal類型(不丟失精度)

  建議使用預編譯語句進行數據庫操作

  禁止跨庫查詢

   禁止select * 查詢,消耗更多的cpu和io及網絡帶寬資源。

  避免使用子查詢,可以把子查詢優化為join操作

mysql分區表

  確認mysql服務器是否支持分區表:show plugins;

  在邏輯上為一個表,在物理上存儲在多個文件中。

 

  

  

  

  

  

  

 

 

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM