Mysql資料庫效能

來源:互聯網
上載者:User

標籤:帶來   應該   尾碼   備份   劃線   ext   html   原則   磁碟   

Mysql資料庫設計規範https://www.cnblogs.com/Luke-Me/p/8994432.html

  我們在項目一開始的設計中,就要忙著考慮資料庫的設計,表、欄位、索引、sql等等,而在項目比較大型的時候,團隊開發中由於多人同時進行,那麼儘早的進行設計規範是項目開發非常關鍵的一步,那麼關於資料庫設計規範有哪些呢,包括以下6項: 

複製代碼
1.資料庫命名規範

  2.資料庫基本設計規範

  3.資料庫索引設計規範

  4.資料庫欄位設計規範  

  5.SQL開發規範

  6.資料庫操作行為規範
複製代碼
接下來逐一詳細介紹一下各個規範:

1.資料庫命名規範:

  1)所有資料庫物件名稱必須使用小寫字母並用底線分割(MySQL對大小寫是敏感的)

  2)禁止使用MySQL的保留關鍵字(比如:select user,from,age from tb_user 這時候識別不出from關鍵字,除非使用from,反向單引號來區別)

  3)資料庫物件的命名最後能夠見名識義,並且最好不要超過32個字元 ,例如:使用者資料庫 bd_userdb (百度_使用者資料庫) ,使用者帳號表 user_account

  4)臨時庫表必須以tmp首碼並以日期為尾碼,tmp_user_20180505 提供更加明確的表名

    備份庫,備份表必須以bak首碼並以日期為尾碼,bak_userdb_20180504 bak_user_20180505

  5)所有儲存相同資料的列名和類型必須一致,例如:不同庫表中的user_id(int unsigned not null),那麼名稱和類型必須是一致的,否則會產生查詢效率降低等各種問題

2.資料庫基本設計規範:

  1)所有表必須使用InnoDB儲存引擎。在MySQL5.6以後,innodb已經成為了預設儲存引擎,它支援事務、行級鎖,更好的恢複性,高並發下效能更好

  2)資料庫和表的字元集統一使用UTF-8。為了避免亂碼、效能等問題

  3)所有的表和欄位都需要添加註釋。使用comment添加備忘資訊,從一開始就進行資料庫字典的維護

  4)盡量控制單表資料量的大小,建議控制在500萬行以內。使用曆史資料歸檔、分庫分表操作手段來控制資料量的大小

  5)謹慎使用MySQL中的分區表。跨分區查詢效率比較低,建議採用物理分表的方式來管理大資料

  6)盡量做到冷資料分離,減小表寬度。欄位太多的情況,盡量分表,將常用的放在一塊,不常用的欄位分到其他表中,有效減少磁碟的IO,保證熱資料的快取命中率

  7)禁止在表中建立預留欄位。由於無法預知預留欄位的類型,後期對改欄位進行修改會耗費很多資源,對錶進行鎖定等問題

  8)禁止儲存圖片、檔案等二進位檔案,造成MySQL的效能影響。這些應該儲存到專門的圖片、檔案伺服器中,資料庫中只儲存對應的資訊標識。

    禁止線上上做資料庫壓力測試

    禁止從開發環境、測試環境直連產生環境資料庫

3.索引設計規範:

  1)限制每張表索引的數量,建議單表索引不超過5個 。索引並不是越多越好,能提高查詢效率,也能降低效率。應該根據實際情況來建立索引。

  2)每個InnoDB表中必須有一個主鍵(唯一非空列)。不用使用頻繁更新的列為主鍵,不使用MD5,UUID,HASH,字串列作為主鍵。主鍵建議選擇使用自增ID值

  3)常見索引列建議:where從句中的列 order by、group by、distinct 中的欄位,多表join的關聯列,如果在字句中是單個列,那就單獨索引,有多個列,那可以建立聯合索引

  4)如何選擇索引列的順序,區分度最高(比如主鍵列)的列,欄位長度小,使用頻繁的列放在聯合索引的最左側

  5)避免建立冗餘和重複的索引:index(a,b,c),index(a,b),index(a) 對於a就是重複索引

  6)對於頻繁的查詢優先考慮使用覆蓋索引:包含了所有查詢欄位的索引

  7)盡量避免使用外鍵約束。外鍵會影響父表與子表的寫操作從而降低效能

4.資料庫欄位設計規範:

  1)優先選擇符合儲存需要的最小資料類型。例如:將字串轉化為數字儲存

   對於非負數優先選用無符號型來儲存。例如:主鍵id,無符號比有符號多出一倍的儲存空間。

   有符號:signed int -2147483648 ~ 2147483647

   無符號:unsigned int 0 ~ 4294967295

   varchar(N) N代表的是字元數,而不是位元組數,使用UTF8儲存漢字varchar(255)=765個位元組

   過大的長度會消耗更多的記憶體,根據欄位長度來分配記憶體。

  2)避免使用Text、Blob資料類型,若需要使用,盡量分配到專門的擴充表中

  3)避免使用Enum枚舉類型。order by操作效率低。禁止使用數值作為ENum枚舉值

  4)儘可能把所有列定義為NOT NULL。索引NULL列需要更多的儲存空間來儲存。索引會失效。

  5)避免使用字串來儲存日期時間,使用TIMESTAMP或DATATIME來儲存時間

  6)與財務相關的金額類型資料,必須使用Decimal類型。保證資料精度,計算時不丟失精度。

5.資料庫SQL開發規範:

  1)建議使用先行編譯語句進行資料庫操作。只傳參數,比傳遞sql更加高效,相同語句一次解析之後,多次使用,節約sql解析的成本,提高處理效率。

  2)避免資料類型的隱式轉換。隱式轉換導致索引失效,一般在where字句條件中出現的類型轉換,導致了索引失效。

  3)合理利用已存在索引,而不是盲目添加索引。

    避免使用雙%的查詢條件:like ‘%123%‘,只要出現首碼%,索引失效。

    一個SQL只能利用到複合索引的一列進行範圍查詢,若聯合索引 index(a,b,c) 對a進行範圍查詢,那麼b和c將失效,應當將a放到最右側

    使用left join 或 not exists 來最佳化 not in 操作,not in會使索引失效

  4)程式串連不同資料庫時應該使用不同的帳號,禁止跨庫查詢

  5)禁止使用 select * 必須使用 select <欄位列表> 查詢,消耗過多的IO和cpu以及網路頻寬資源

  6)禁止使用不含欄位的insert 語句,為了減少表結構的變更帶來的影響:insert into table values(‘a‘,‘b‘,‘c‘); 應當指明要插入的列,insert into table(c1,c2,c3) values(‘a‘,‘b‘,‘c‘);

  7)避免使用子查詢,可以將子查詢最佳化為join操作:子查詢都會建立暫存資料表,佔用cpu和io資源,子查詢結果集無法使用索引。

  8)避免使用join關聯太多的表:

    每關聯一張表,多佔用一部分記憶體(join_buffer_size)

    會產生暫存資料表操作,影響查詢效率

    MySQL最多允許關聯61張表,建議不超過5張表

  9)減少同資料庫的互動次數

  10)使用in代替or。in的值不超過500個,in可以有效使用索引,or不行。

  11)禁止使用order by rand() 進行隨機排序,這個操作對效能有很大影響,盡量通過程式來得到隨機值再從資料庫中擷取資料。

  12)禁止在where從句中對列進行函數轉換和計算,造成索引的失效。where data(createtime) = ‘2018-01-01‘ ,盡量在程式中進行計算

  13)在明顯不會出現重複值的時候使用union all 而不是union。union會先載入所有資料到暫存資料表中然後去重,而union all不會去重。

  14)拆分複雜的大SQL成多個小SQL。並存執行小SQL來提高處理效率

6.資料庫操作行為規範:

  1)超過100萬行的批量寫操作,要分批多次進行操作:

    大大量操作可能造成嚴重的主從延遲問題

    binlog日誌為row格式時,胡產生大量的日誌,造成資源不足

    避免產生大事務的操作

  2)對於大表使用pt-online-schema-change工具來修改表結構。過程是:先建立新表,然後複製舊錶資料到新表,將新表名稱改成舊錶名稱,最後刪除舊錶

  3)禁止為程式使用的帳號賦予super超管許可權

  4)對於程式串連資料庫帳號,遵循許可權最小的原則。程式使用資料庫支行和只能在一個DB下使用,不準跨庫,程式使用的帳號原則上不準有drop許可權

以上就是MySQL的一些設計規範,當然不是說一定要遵循以上的原則,具體視實際應用情境而定,通過DBA指導來指定原則。

本文原創,轉載請標註出處:http://www.cnblogs.com/Luke-Me/p/8994432.html

Mysql資料庫效能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.