Myisam & InnoDB 優化引數

markzy5201190發表於2012-08-08
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分句

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-740413/,如需轉載,請註明出處,否則將追究法律責任。

相關文章