資料庫優化是一種綜合性的技術。並非通過某一種方式讓資料庫效率提高非常多。而是通過多方面的提高。從而使得資料庫效能提高。
主要包含:
1、表的設計合理化(3正規化)
2、給表加入合適的索引。怎樣使用索引
3、分表技術(水平切割、垂直切割)
4、定時清除資料垃圾,定時碎片整理
5、多用儲存過程和觸發器
6、對mysql配置進行優化
7、讀寫分離
8、mysqlserver硬體升級。
二、資料庫的設計
步驟:
1、收集資訊:與該系統有關人員進行交流。充分了解資料庫須要完畢的任務
2、標識實體:詳細存在的物件,名詞。
比方:使用者、帖子、回帖、板塊
3、標識屬性
1)一對一:兩個表的主鍵是公共欄位
2)一對多:主鍵和非主鍵建關係
3)多對一:非主鍵和主鍵建關係
4)多對多:非主鍵和非主鍵建關係
5、將E-R圖轉成表
1)將實體轉成表,將屬性轉成欄位
2)假設找不到一個合適的欄位做主鍵,我們加入一個自己主動增長列做主鍵。
3)建立正確的關係
三、資料規範化
表設計出來以後,並非最合理的結構。我們須要對錶進行規範化(我們通過3正規化來對錶進行規範化)
先滿足第一正規化--再滿足第二正規化--再滿足第三正規化
1NF: 確保每列的原子性
第一正規化用來規範化全部的欄位,全部的欄位都不可再分
注意:比方地址這個欄位。假設不分類彙總、不排序。只起一個字串的作用。這時我們不拆(反3正規化)
假設一個關係滿足1NF,而且除了主鍵以外其它列都依賴於該主鍵,則滿足第二正規化(2NF)
3NF: 消除傳遞依賴
在非主鍵欄位中。假設一個欄位能夠推導還有一個欄位,這就叫傳遞依賴。
四、規範化和效能的關係
1、為了滿足某種商業目標。資料庫效能比規範化資料庫更重要
通過對給定的表中加入額外的欄位,以大量降低須要從中搜尋資訊所須要的時間。
通過在給定的表中插入計算列(比方成績總分),以方便查詢
2、進行規範化的同一時候須要考慮資料庫的效能
五、定位慢查詢
找出查詢速度較慢的SQL語句。
增、刪、改、查
當中查詢佔90%,增刪改共佔10%
Mysql資料庫一些關於狀態的查詢
用"show status"
指令 說明
show status 查詢mysql資料庫的一些執行狀態
show status like 'com_insert'; 顯示執行了多少次插入操作
show status like 'com_update'; 顯示執行了多少次更新操作
show status like 'com_delete'; 顯示執行了多少次刪除操作
show status like 'com_select'; 顯示執行了多少次查詢操作
show status like 'uptime'; 顯示mysql啟動了多長時間,假設時間非常長了,資料庫表的儲存引擎有的是myisam,這時候注意要碎片整理。
show [session | global ] status like...,假設不寫,預設是會話級(session),想要查詢從mysql啟動一直到如今,用global。
顯示慢查詢
show variables like 'long_query_time' 顯示慢查詢的時間,預設是10秒
set long_query_time=0.5 把慢查詢的時間設定為0.5秒,以便於測試
show status like 'slow_queries' 顯示慢查詢的時間,預設是10秒
定位慢查詢(開啟慢查詢日誌)
一旦開啟慢查詢日誌以後。日誌檔案的位置在my.ini檔案裡去查詢,預設情況下mysql不會記錄慢查詢
怎樣開啟慢查詢:
1、關閉當前mysql服務:net stop mysql
2、通過安全模式啟動就會寫日誌。
3、關閉安全模式啟動的mysql
4、把慢查詢的時間設定為0.5秒,set long_query_time=0.5
5、select * from table where xx='00' ;
6、到慢查詢日誌中去找相應的SQL語句。
反三正規化:
正規化越高。資料冗餘就越少,可是有時就效率就越低下,為了提高執行效率,能夠適當的讓資料冗餘。