對於數據庫優化的理解

數據庫層面

1 分庫

把大數據量的庫存到多個庫中,兩個庫使用徹底相同的表結構,經過時間戳字段把某段時間的內容分別存到多個庫中java

2 分區

指的是在一張表上分區,有個明顯的弊端,須要分區索引,有多個分區有多個分區索引,這個時候查的時候不走分區索引,而只走表索引會形成全表鎖,因此不建議採用分區redis

3 分表

  • 水平分表,和分庫相似,大數據量的內容放到多個表中
  • 垂直分表,常常查的放到一張表,不常常的放到另外一個表

緩存方面

緩存redis,mongodb存儲日誌文件mongodb

Sql語句優化

  • 不使用*
  • 從出發角度考慮,以什麼角度查,好比兩個表聯查,這個表10條,那個1000條,必定要先從小的範圍查大的範圍,由於從小的查一共就10條,從大的查1000條,效率確定更低
  • 注意笛卡爾積,若是忘寫條件,會查出大量數據,給數據庫增壓
  • 一些關鍵字要注意,比方說in指包含,可使用exist代替,好比後邊有3條數據(id 5 6 7),能夠用between 5 and 7,再有or ,通常千萬不要使用,他會全表查詢 通常用union 代替,但他有去重效果,使用union all,看業務場景
  • 應儘可能避免在 where 子句中對字段進行 null 值判斷,這點通常在設計數據表時,應該考慮給默認值,避免null的出現
  • 使用like的時候不要在前邊加通配符,會致使索引失效 等

業務邏輯

  • 比方視圖、函數、存儲過程,比方說10張表的內容在一個頁面展現,要是關聯查詢效率就會很低,這時候咱們創建視圖,就不用作關聯了,直接查到想要的數據。
  • 函數,if 判斷什麼的放到數據庫中,可是不建議使用,給數據庫增大壓力,咱們能夠在java中寫
  • 存儲過程的話,裏面能夠放視圖、函數等等複雜語句,但調用簡單,方便java代碼調用,能夠將存儲過程提供給第三方廠商,實現接口對接

冷備份熱備份

  • 冷備份,數據庫和項目在不運行時進行備份,出現錯誤進行數據恢復
  • 熱備份,每次增長或修改或刪除的時候都進行熱備份,但不建議使用,由於出現錯誤不能回退
相關文章
相關標籤/搜索