MySQL程序開發注意事項
隨著云服務的迅速發展,很多公司逐步開始將業務上云,對于開發人員來說,將需要做很大的改變,需要從原來的Oracle、DB2等數據庫轉型到MySQL數據庫上來。
那么MySQL程序開發的時候有哪些注意事項呢?
1、 資源限制
資源方面,MySQL每個查詢只能用到1個CORE,并且不同版本對CPU資源有不同的限制(如:5.6版本最多使用48個CORE)。
2、 磁盤 IO
對于磁盤IO方面,我們應根據數據文件的類型來分配磁盤的使用,對于IO類型有順序IO和隨機IO兩種,順序IO類似binLog、redolog、undolog之類,對于數據庫表文件的訪問基本上都屬于隨機IO類型,所以我們應該把數據文件應該放在IO性能更好的磁盤,還有,在我們設計的時候,盡量多考慮數據庫聚簇索引的內部排序特性,使其訪問時順序IO和隨機IO的相結合。
3、 結果緩存
MySQL提供的結果緩存功能,與Oracle、DB2數據庫的緩存相比,性能懸殊較大,對于OLTP系統,數據變更較大的,建議關閉。
4、 性能問題
MySQL隨著連接數上升會出現性能會下降,所以不是連接數越多越好,適可而止,不過我們可以通過一些官方的收費組件TP來優化此問題。
5、 存儲引擎選擇
目前MySQL支持的存儲引擎有MyASAM、InnoDB、MEMORY、MRG_MyASM等等,需要根據實際業務情況來選擇存儲引擎,具體比較如下表:
6、 子查詢
有關子查詢方面,MySQL支持子查詢,但性能較差,對于低版本的MySQL,建議不用子查詢。
7、 數據存儲
數據存儲方面,建議考慮分庫分表,也對單表進行分區,MySQL的分區功能沒有像Oracle那樣完善,局限性比較多,具體如下表:
分區的特性:
- 可以存儲更多的數據
- 提高查詢效率
- 便于進行歷史數據的管理
- 獲得更高的吞吐量
- 并不是所有存儲引擎支持分區,如:MERGE
- 在同一張表上,不能對分區使用混合存儲引擎:
大表一定要拆分,否則會出現性能問題,具體是采用分區還是分表和分庫,可以根據實際情況來處理。
8、 少用復雜SQL語句
復雜的SQL語句盡量少用,復雜的SQL一般會出現性能問題。
9、檢查每一句SQL執行計劃
對于每一個SQL語句,都要檢查SQL的執行計劃,方法如下:
type的說明如下表:
10、謹慎考慮SQL語句
還有一個需要注意,MySQL的一個SQL只使用一個索引,這與其它數據庫類似,在建立索引的時候需要充分考慮,盡量建索引在重復性低的字段上,能建唯一索引或主鍵的一律建唯一索引或主鍵。
來自: http://rdcqii.hundsun.com/portal/article/431.html