mysql資料庫優化之表的設計和慢查詢定位

weixin_33894992發表於2017-05-21
一、資料庫優化包含的方面
資料庫優化是一種綜合性的技術。並非通過某一種方式讓資料庫效率提高非常多。而是通過多方面的提高。從而使得資料庫效能提高。


主要包含:
1、表的設計合理化(3正規化)
2、給表加入合適的索引。怎樣使用索引
3、分表技術(水平切割、垂直切割)
4、定時清除資料垃圾,定時碎片整理
5、多用儲存過程和觸發器
6、對mysql配置進行優化
7、讀寫分離
8、mysqlserver硬體升級。


二、資料庫的設計
步驟:
1、收集資訊:與該系統有關人員進行交流。充分了解資料庫須要完畢的任務
 
2、標識實體:詳細存在的物件,名詞。
比方:使用者、帖子、回帖、板塊

3、標識屬性


4、標識關係:
  1)一對一:兩個表的主鍵是公共欄位
  2)一對多:主鍵和非主鍵建關係
  3)多對一:非主鍵和主鍵建關係
  4)多對多:非主鍵和非主鍵建關係
5、將E-R圖轉成表
  1)將實體轉成表,將屬性轉成欄位
  2)假設找不到一個合適的欄位做主鍵,我們加入一個自己主動增長列做主鍵。
  3)建立正確的關係


三、資料規範化


表設計出來以後,並非最合理的結構。我們須要對錶進行規範化(我們通過3正規化來對錶進行規範化)
先滿足第一正規化--再滿足第二正規化--再滿足第三正規化


1NF: 確保每列的原子性
     第一正規化用來規範化全部的欄位,全部的欄位都不可再分

注意:比方地址這個欄位。假設不分類彙總、不排序。只起一個字串的作用。這時我們不拆(反3正規化)


2NF: 非鍵欄位必須依賴於主鍵欄位

假設一個關係滿足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語句。


反三正規化:

正規化越高。資料冗餘就越少,可是有時就效率就越低下,為了提高執行效率,能夠適當的讓資料冗餘。









相關文章