數據庫優化

三個大方向

  1.優化sql以及數據庫設計

   2.升級數據庫以及硬件

  3.更換數據庫類型,更換newSQL、noSQL數據庫

大方向1之數據庫設計篇

    --表庫設計

     1.1 字段避免null,null值很難優化,推薦默認數字0替代

     1.2 儘量準確使用數據類型,併合理的設計長度,比如使用enum char而不用varchar,char定長的,varchar可變長,定長讀取速度快佔空間固定,可變長佔空間隨存數據大小變化但讀取速度相對慢

     1.3單表不要太多字段

     1.4分區 分表 分庫(讀寫分離)等

   --索引設計

     1.4 索引不是越多越好,要根據查詢針對性的創建,考慮where和order by命令上涉及查詢頻繁列建立,

           可根據explain來查看索引使用率

     1.5 避免where條件中有null判斷和數據,否則索引會失效,儘可能使用not null控制字段

     1.6值分佈稀少字段不適合建立索引,比如性別只有兩種值字段

     1.7不適用外鍵和unique,由程序保證約束

      1.8多條件查詢頻繁字段考慮建立聯合索引,遵循最左原則可以涉及單條件查詢。

      1.9索引遵循最左前原則

大方向1之sql優化篇

       1.1使用limit對查詢結果限定

       1.2查詢字段寫出來不要寫select * ,可以增加查詢效率以及索引使用率

       1.3使用join替代子查詢

       1.4拆分較大insert和delete語句

       1.5開啓慢查詢日誌或者程序使用數據庫查詢監控找慢的sql

      1.6條件不作運算,避免使用%xxx  != <> 等查詢樣式

(以下爲複製內容)

大方向2之升級數據庫

    2.1  開源數據庫會帶來大量的運維成本且其工業品質和MySQL尚有差距,有很多坑要踩,如果你公司要求必須自建數據庫,那麼選擇該類型產品。如tiDB pingcap/tidb,Cubrid Open Source Database With Enterprise Features。
     2.2  阿里雲POLARDB,POLARDB 是阿里雲自研的下一代關係型分佈式雲原生數據庫,100%兼容MySQL,存儲容量最高可達 100T,性能最高提升至 MySQL 的 6 倍。POLARDB 既融合了商業數據庫穩定、可靠、高性能的特徵,又具有開源數據庫簡單、可擴展、持續迭代的優勢,而成本只需商用數據庫的 1/10。
    2.3 阿里雲OcenanBase,淘寶使用的,扛得住雙十一,性能卓著,但是在公測中,我無法嘗試,但值得期待。
     2.4阿里雲HybridDB for MySQL (原PetaData),雲數據庫HybridDB for MySQL (原名PetaData)是同時支持海量數據在線事務(OLTP)和在線分析(OLAP)的HTAP(Hybrid Transaction/Analytical Processing)關係型數據庫。
       2.5騰訊雲DCDB,DCDB又名TDSQL,一種兼容MySQL協議和語法,支持自動水平拆分的高性能分佈式數據庫——即業務顯示爲完整的邏輯表,數據卻均勻的拆分到多個分片中;每個分片默認採用主備架構,提供災備、恢復、監控、不停機擴容等全套解決方案,適用於TB或PB級的海量數據場景。

 

大方向3之換數據庫類型

     hadoop家族。hbase/hive懟上就是了。但是有很高的運維成本,一般公司是玩不起的,沒十萬投入是不會有很好的產出的!
我選擇了阿里雲的MaxCompute配合DataWorks,使用超級舒服,按量付費,成本極低。
     MaxCompute可以理解爲開源的Hive,提供SQL/mapreduce/ai算法/python腳本/shell腳本等方式操作數據,數據以表格的形式展現,以分佈式方式存儲,採用定時任務和批處理的方式處理數據。DataWorks提供了一種工作流的方式管理你的數據處理任務和調度監控。
      當然你也可以選擇阿里雲hbase等其他產品,我這裏主要是離線處理,故選擇MaxCompute,基本都是圖形界面操作,大概寫了300行SQL,費用不超過100塊錢就解決了數據處理問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章