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分句