天天看點

常見的資料庫優化方法

對于後端開發人員來說,經常會和資料打交道,是以資料庫的優化很重要,今天總結下部分資料庫的優化知識。主要可以通過以下幾種方式對資料庫進行優化:

性能優化

  • 表的設計合理化,符合三大範式(3NF)
    • 1NF是對屬性的原子性限制,要求屬性(列)具有原子性,不可再分解;(隻要是關系型資料庫都滿足1NF)
    • 2NF是對記錄的惟一性限制,要求記錄有惟一辨別,即實體的惟一性;
    • 3NF是對字段備援性的限制,它要求字段沒有備援。 沒有備援的資料庫設計可以做到。
  • 添加适當索引(index) [四種: 普通索引、主鍵索引、唯一索引unique、全文索引]
    • 較頻繁的作為查詢條件字段應該建立索引;
    • 唯一性太差的字段不适合單獨建立索引,即使頻繁作為查詢條件;
    • 更新非常頻繁的字段不适合建立索引
    • 不會出現在WHERE子句中的字段不該建立索引
  • 分表技術(水準分割、垂直分割);
  • 讀寫[寫: update/delete/add]分離;
  • 存儲過程 [子產品化程式設計,可以提高速度];
  • 對mysql配置優化 [配置最大并發數my.ini, 調整緩存大小 ];
  • mysql伺服器硬體更新;
  • 定時的去清除不需要的資料,定時進行碎片整理(MyISAM)。

SQL語句優化

  • 通過show status指令了解各種SQL的執行頻率;
  • 定位執行效率較低的SQL語句-(重點select;
  • 通過explain分析低效率的SQL;
  • 确定問題并采取相應的優化措施。

添加索引

  • 索引主要可以分為以下幾種:
    • 主鍵索引,主鍵自動的為主索引 (類型Primary);
    • 唯一索引 (UNIQUE);
    • 普通索引 (INDEX);
    • 全文索引 (FULLTEXT) [适用于MyISAM] ——》sphinx + 中文分詞 coreseek [sphinx 的中文版 ];
    • 綜合使用=>複合索引
  • 可能使用到索引
    • 對于建立的多列索引,隻要查詢條件使用了最左邊的列,索引一般就會被使用。
    • 對于使用like的查詢,查詢如果是 ‘%aaa’ 不會使用到索引, ‘aaa%’ 會使用到索引。
  • 不使用索引
    • 如果條件中有or,即使其中有條件帶索引也不會使用。
    • 對于多列索引,不是使用的第一部分,則不會使用索引。
    • like查詢是以%開頭
    • 如果列類型是字元串,那一定要在條件中将資料使用引号引用起來。否則不使用索引。(添加時,字元串必須’’)
    • 如果mysql估計使用全表掃描要比使用索引快,則不使用索引。
  • 作者:譚慶波

    連結:https://www.zhihu.com/question/36431635/answer/381557352

    來源:知乎

    著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

資料庫優化分三個等級。

第一級就是常見的簡單DDL DML調優。SQL寫的好不好啊,group by order by對不對啊,select别用*,記得要要hit index啊。資料庫表設計好點啊,主鍵外鍵索引啊,執行計劃看一看啊。市面上九成九的資料庫調優都在這。

第二級是DBA層級調優。MSSQL,ORACLE,MYSQL都各自有幾十項配置。在不同的應用場景下需要針對性調整。比如MSSQL 的MAXDOP在有高并發且大SQL的情況下要适當調整限制,而全部是小SQL的情況下可以設定為無限。比如ORACLE的自動優化器在SQL性狀相似的時候不開也沒太大問題,CPU超過16個core的時候,parallel hint到底設定為幾。這些都是學問。都沒個定數,都是要DBA拿實際生産資料套研究的。oracle的AWR, entierprise manager, MSSQL的一堆管理SP,trace log,都是必讀項。到這層,已經是每個公司每百程式員1,2個人的事情了。

最後一級是資料庫中間件和infra層級調優。上個月我處理過一個MSSQL叢集死慢死慢,但是單node就沒問題。後來查出來是windows 叢集的仲裁設定有問題,導緻太頻繁failover,雖然failover号稱無縫,但是實際上還是有10秒左右資料庫無法通路的。這一級,基本上是千人以上的公司才會遇到的問題,也就幾個人懂,但凡其中有2個人同時休假,就歇了

作者:蘿魏紫

連結:https://www.zhihu.com/question/36431635/answer/489961019

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。