MySQL歷史
MYSQL 配置原則配置合理的MySQL MySQL最合理的使用針對MyISAM或InnoDB 針對不同的應用情況進行合理配置針對my.cnf
進行配置,後面設置是針對內存為2G的服務器進行的合理設置
公共選項
MyISAM選項
InnoDB選項
MyISAM和InnoDB存儲引擎性能
MyISAM和InnoDB
存儲引擎性能差別並不是很大,針對InnoDB來說,影響性能的主要是
innodb_flush_log_at_trx_commit這個選項,如果設置為1 關系,設置為0效率能夠看到明顯提升,當然,同樣你可以SQL
中提交“SET AUTOCOMMIT = 0”來設置達到好的性能。
同時也可以看出值得使用InnoDB來替代myISAM引擎來進行開發,畢竟
InnoDB有多數據庫特性、更良好的數據存儲性能和查詢性能MySQL技巧分享
------------------------------------------------------------ 存儲引擎- - My I SAM, I n n oDB ,其他
MyISAM 相對更適合插入不多不頻繁,查詢較多的應用環 WAL(write ahead logging)
InnoDB適合大並發寫入和查詢的環境:支持事務(ACID 空間(不受大文件限制)
Merge其實就是MRG_MyISAM,適用於將相同類型的多索引的好處
ARCHIVE存儲引擎被用來以非常小的覆蓋區存儲大量無
索引數據。 是只讀類型。
MyISAM 優化key_buffer_size 分配給MyISAM索引緩存的內存總數
● query_cache_size 控制分配給查詢緩存的內存總量
● long_query_time 設定慢查詢時間
● external-locking 禁止使用外部鎖,可預防死鎖
● back_log 臨時停止響應新請求前在短時間內可以堆起多少請求。如 ● table_cache 緩存數據表的數量,避免重復打開表的開銷
● thread_cache_size 緩存可重用線程數,見笑創建新線程的開銷
● sort/join/read buffer size 分配給每個線程中處理排序/掃描表連 ● skip-bdb 等,禁用不必要的引擎
InnoDB 優化 ● 如果數據庫CPU使用率小於70%,則MySQL的壓力可能在於磁盤大一些,但不要設置緩沖池等於或超過物理內存的80%
● 把多個修改(INSERT/UPDATE/DELETE)放在一個事務裡。但是也要 ● innodb_flush_log_at_trx_commit 設置為0(每秒刷新),1(實時
刷新),2(只寫日志文件,不刷新到磁盤) ● 往innoDB表導入數據時,先關閉autocommit模式,否則會實時 ● 更多的請查看:http://iMySQL.cn/?q=node/116
innodb_buffer_pool_size 控制分配給包括集群數據以及
次要索引頁的Innodb緩存的內存總數,默認16MB
● innodb_additional_mem_pool_size 控制分配給對
Innodb內部數據字典進行排序所需的緩沖,默認1MB
● innodb_log_buffer_size 控制分配給對Innodb存儲提前
寫日志記錄所需的緩沖,默認1MB
● innodb_log_files_in_group 在日志組裡日志文件的數
目。InnoDB以循環方式寫進文件。默認是2(推薦)
● innodb_log_file_size 默認是5MB。建議值從1MB到N
分之一緩沖池大小,其中N是組裡日志文件的數目
其他優化 - -char 型 vs int 型
● 獨立索引 vs 聯合索引
● 記錄 slow querIEs ● 定期執行optimize / analyze table
● 針對Innodb表,盡量不執行 SELECT COUNT(*) 語句
● 善用 EXPLAIN來幫助你分析查詢優化情況
● 如果需要對一個較大的且並發讀寫較多的數據表做 GROUP BY 等統表連接時,連接字段的類型最好一致(包括字段長度),這樣的話索引 ● 大部分情況下,字符類型的字段索引值需要一部分 ● 執行查詢時,盡量不使用外部函數,因為這樣的話就無法使用可能存 ● 把拖沓復雜,速度慢的的查詢分解成多個簡潔明了的查詢
● 在索引字段上使用 LIKE 查詢時,左邊不要使用 '%' 修飾符,這樣就
可以利用索引,否則無法使用索引.如 ... `name` LIKE 'yejr%'
● 對於頻繁更改的MyISAM表,應盡量避免更新所有變長字段
(VARCHAR、BLOB和TEXT) ● 查詢時如果有 ORDER BY分句