1、 避免**頁面出現訪問錯誤
由於資料庫連線timeout產生頁面5xx錯誤
由於慢查詢造成頁面無法載入
由於阻塞造成資料無法提交
2、 增加資料庫的穩定性
很多資料庫問題都是由於低效的查詢引起的
3、 優化使用者體驗
流暢頁面的訪問速度
良好的**功能體驗
可以從哪幾個方面進行資料庫的優化?如下圖所示:
a、 sql及索引優化
根據需求寫出良好的sql,並建立有效的索引,實現某一種需求可以多種寫法,這時候我們就要選擇一種效率最高的寫法。這個時候就要了解sql優化
b、 資料庫表結構優化
根據資料庫的正規化,設計表結構,表結構設計的好直接關係到寫sql語句。
c、 系統配置優化
大多數執行在linux機器上,如tcp連線數的限制、開啟檔案數的限制、安全性的限制,因此我們要對這些配置進行相應的優化。
d、 硬體配置優化
選擇適合資料庫服務的cpu,更快的io,更高的記憶體;cpu並不是越多越好,某些資料庫版本有最大的限制,io操作並不是減少阻塞。
注:通過上圖可以看出,該金字塔中,優化的成本從下而上逐漸增高,而優化的效果會逐漸降低。
1、資料庫設計規範(三大正規化)
2、新增索引(普通索引,唯一索引,全文索引等等)
3、 分庫分表(垂直分割和水平分割)
4、 讀寫分離
5、 儲存過程
6、 配置mysql連線引數
7、 sql語句優化
8、 清理碎片化
9、 mysql伺服器優化
第一正規化:保證每一個列的原子性,不可再分
第二正規化: 在滿足第一正規化基礎之上,保證表中資料的唯一,每一個列都和主鍵相關,一張表只描述一件事情
注:在實際開發場景當中,根據業務需求來定,沒有必要非得嚴格按照三大正規化
1、垂直拆分定義
所謂的垂直拆分,就是把原來一個有很多列的表拆分成多個表,這解決了表的寬度問題。
2、垂直拆分原則
通常垂直拆分可以按以下原則進行:
①把不常用的欄位表單獨存放到一個表中。
②把大欄位獨立存放到一個表中。
③ 把經常一起使用的欄位放到一起。
1、為什麼水平拆分
表的水平拆分是為了解決單表資料量過大的問題,水平拆分的表每一個表的結構都是完全一致的
2、水平不拆分原因
如果單表的資料量達到上億條,那麼這時候我們儘管加了完美的索引,查詢效率低,寫入的效率也相應的降低。
3、如何將資料平均分為n份
通常水平拆分的方法為:
①對customer_id進行hash運算,如果要拆分為5個表則使用mod(customer_id,5)取出0-4個值。
②針對不動的hashid把資料儲存到不同的表中。
4、水平拆分面臨的挑戰
①誇分割槽表進行資料查詢
前端業務統計:
業務上給不同的使用者返回不同的業務資訊,對分割槽表沒有大的挑戰。
②統計及後臺報表操作
但是對後臺進行報表統計時,資料量比較大,後臺統計時效性比較低,後臺就用匯總表,將前後臺的表拆分開。
MySQL 效能優化
訪問量越來越大,mysql 自然成為瓶頸,因此最近我一直在研究mysql的優化,第一步自然想到的是mysql系統 引數的優化,作為一個訪問量很大的 日20萬人次以上 的資料庫 系統,不可能指望mysql預設的系統引數能夠讓mysql執行得非常順暢。通過在網路上查詢資料和自己的嘗試,我認為以下系統引數...
MySQL 效能優化
做點東西要用到mysql故近來在學習mysql,和學習其他的資料庫一樣,總覺得建表容易,但是要讓資料庫良好的執行卻不那麼簡單.下面是一些mysql效能優化方面的知識 看了一下,受益非淺.注意 index name,age 表示在name,age兩列上建立聯合索引 由於索引對資料庫的查詢效能有著至關重...
MySQL效能優化
效能優化是通過某些有效的方法來提高mysql的執行速度,減少佔用的磁碟空間。效能優化包含很多方面,例如優化查詢速度,優化更新速度和優化mysql伺服器等。本文介紹方法的主要有 資料庫管理人員可以使用show status語句來查詢mysql資料庫的效能。語法 show statue like val...