總結下MySQL存儲引擎的區別和性能優化的一些方法

MySQL 主要使用的存儲引擎有MyISAM 和 InnoDB。
(一)、MyISAM
MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在所有MySQL配置裏被支持,它是默認的存儲引擎,除非配置MySQL默認使用另外一個引擎。
(二)、 InnoDB
InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB是爲在處理巨大數據量時獲得最大性能而設計的。它的CPU使用效率非常高。和MyISAM相比需要較多的內存和磁盤空間。

MySQL的性能優化的方法:數據庫設計和查詢優化,服務器端優化,存儲引擎優化。
1、數據庫設計:
A、對於數據量較大的表的設計往往是粗粒度的,也會冗餘一些必要的字段,已達到儘量用最少的表、最弱的表關係去存儲海量的數據。並且在設計表時,一般都會對主鍵建立聚集索引,含有大數據量的表更是要建立索引以提供查詢性能。
B、添加必要的(冗餘)字段:像“創建時間”、“修改時間”、“備註”、“操作用戶IP”和一些用於其他需求(如統計)的字段等,在每張表中必須都要有,不是說只有系統中用到的數據纔會存到數據庫中,一些冗餘字段是爲了便於日後維護、分析、拓展而添加。
C、設計合理的表關聯:若多張表之間的關係複雜,建議採用第三張映射表來關聯維護兩張表之間的關係,以降低表之間的直接耦合度。若多張表涉及到大數據量的問題,表結構儘量簡單,關聯也要儘可能避免。
D、選擇合適的主鍵生成策略:主鍵生成策略大致可分:int自增長類型(identity、sequence)、手動增長類型(建立單獨一張表來維護)、手動維護類型(如userId)、字符串類型(uuid、guid)。int型的優點是使用簡單、效率高,但多表之間數據合併時就很容易出現問題,手動增長類型和字符串類型能很好解決多表數據合併的問題,但同樣也都有缺點:前者的缺點是增加了一次數據庫訪問來獲取主鍵,並且又多維護一張主鍵表,增加了複雜度;而後者是非常佔用存儲空間,且表關聯查詢的效率低下,索引的效率也不高,跟int類型正好相反。

2、查詢優化:
使用索引:
使用EXPLAIN分析查詢:
調整MySQL(和PHP搭配之最佳組合)的內部配置:
A、改變索引緩衝區長度(key_buffer)
B、改變表長(read_buffer_size)
C、設定打開表的數目的最大值(table_cache)
D、對緩長查詢設定一個時間限制(long_query_time)【MySQL(和PHP搭配之最佳組合)帶有“慢查詢日誌”,它會自動地記錄所有的在一個特定的時間範圍內尚未結束的查詢。】

未完待續..................
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章