MySQL優化
概述
系統的吞吐量瓶頸往往出現在資料庫的訪問速度上,隨著應用程式的運行,資料庫的中的資料會越來越多,處理時間會相應變慢,資料是存放在磁盤上的,讀寫速度無法和記憶體相比,
資料庫層面
MySQL的邏輯架構
最上層的服務并不是Mysql獨有的,大多數基于網路的客戶端/服務器的工具或者服務都有類似的架構
第二層架構中,大多數的MYSQL的核心服務功能都在這一層,包括查詢決議、分析、優化、快取以及所有的內置函式(日期時間等),所有跨存盤引擎的功能都在這一層實作:存盤程序、觸發器、視圖等
第三層包含了存盤引擎,存盤引擎負責Mysql中的資料的存盤和提取,Mysql支持各種不同的存盤引擎,每個存盤引擎都有它的優勢和劣勢,服務器通過API和存盤引擎進行通信,這些API介面屏蔽了不同存盤引擎之間的差異,使的這些差異對上層的查詢程序透明,存盤引擎不會決議SQL不同的存盤引擎之間也不能互相通信,而只是簡單的回應上層服務器的請求
存盤引擎
建議使用Innodb 存盤引擎,在5.5后已經是MySQL默認引擎,
查看表當前使用的存盤引擎,show table status like ‘表名’
讀寫分離
**主從復制:**主寫從讀
MyCat搭建讀寫分離服務:
分表
水平拆分:水平分表就是根據一列或多列資料的值把資料行放到多個獨立的表里,這里不具備業務意義,用于解決解決表行數過大問題
垂直拆分:垂直分表就是把一個資料量很大的表,可以按某個欄位的屬性或使用頻繁程度分類,拆分為多個表,解決列過長問題,
表設計
資料類選擇的原則
更小的通常更好:通常情況下,應該選擇可以正確存盤資料的最小資料型別,更小的資料型別通常更快,因為它們占用更小的磁盤、記憶體和CPU快取,但是要確保沒有低估需要存盤值得范圍,在MYSQL中的多個地方增加資料型別范圍是一個非常耗時和痛苦的操作,
**簡單就好:**簡單資料型別的操作通常需要更少的CPU消耗,比如,整型比字符操作代價更低,舉個例子:
1、應該選擇MySQL內建的型別(date、time等)存盤時間,而不是字串,
2、應該用整型存盤IP地址,推薦博文:http://www.cnblogs.com/skynet/archive/2011/01/09/1931044.html**盡量避免NULL:**通常情況下最好執行列為NOT NULL,除非真的需要存盤NULL值,
如果查詢總包含可能為NULL的列,對于MySQL來說更難優化,因為可為NULL的列使的索引、索引統計等都變的更加復雜,通常把欄位設定為NOT NULL帶來的性能提升比較小,但是如果計劃在列上創建索引,就應該盡量避免設計成可為NULL的列,
資料型別選擇詳解
- 盡量選擇非定長的資料型別,如varchar,text,decimal
一張表的欄位不要過多,
MySQL優化
MySQL查詢的程序
1、客戶端發送一條查詢給服務器
2、服務器先檢查查詢快取,如果命中快取,則立即回傳存盤在快取中的結果,否則進入下一階段結構優化
3、服務器端進行SQL決議、預處理,再由優化器生成對應的執行計劃
4、MySQL根據優化器生成的執行計劃,呼叫存盤引擎的API來執行查詢
5、將結果回傳給客戶端,同時快取查詢結果
索引優化
索引型別:唯一索引,前綴索引,組合索引,普通索引,主鍵索引
什么時候該加索引:where字句中的列,頻繁作為查詢欄位的列,表連接關聯的列,排序用到的列,索引的基數越大,索引的效率就越高,什么叫基數越大,比如手機號,每個列都具有不同的值,非常好區別,這個就適合建立索引,而性別這樣的欄位,因為只有兩個值,以不適合建立索引,就是區分度高低的問題
什么時候不該加索引:表的資料量很小,該欄位的資料頻繁需要被修改,
硬體
更大的記憶體,減少磁盤IO
其他
超 100 萬行的批量寫 (UPDATE,DELETE,INSERT) 操作,要分批多次進行操作
大批量操作可能會造成嚴重的主從延遲
主從環境中,大批量操作可能會造成嚴重的主從延遲,大批量的寫操作一般都需要執行一定長的時間, 而只有當主庫上執行完成后,才會在其他從庫上執行,所以會造成主庫與從庫長時間的延遲情況
binlog 日志為 row 格式時會產生大量的日志
大批量寫操作會產生大量日志,特別是對于 row 格式二進制資料而言,由于在 row 格式中會記錄每一行資料的修改,我們一次修改的資料越多,產生的日志量也就會越多,日志的傳輸和恢復所需要的時間也就越長,這也是造成主從延遲的一個原因
避免產生大事務操作
大批量修改資料,一定是在一個事務中進行的,這就會造成表中大批量資料進行鎖定,從而導致大量的阻塞,阻塞會對 MySQL 的性能產生非常大的影響,
特別是長時間的阻塞會占滿所有資料庫的可用連接,這會使生產環境中的其他應用無法連接到資料庫,因此一定要注意大批量寫操作要進行分批
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/233934.html
標籤:其他
