程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Monty說MySQL的優化(三)

Monty說MySQL的優化(三)

編輯:關於MYSQL數據庫

  十一、維護

  如果可能,偶爾運行一下OPTIMIZE table,這對大量更新的變長行非常重要。

  偶爾用myisamchk -a更新一下表中的鍵碼分布統計。記住在做之前關掉MySQL。

  如果有碎片文件,可能值得將所有文件復制到另一個磁盤上,清除原來的磁盤並拷回文件。

  如果遇到問題,用myisamchk或CHECK table檢查表。

  用mysqladmin -i10 precesslist extended-status監控MySQL的狀態。

  用MySQL GUI客戶程序,你可以在不同的窗口內監控進程列表和狀態。

  使用MySQLadmin debug獲得有關鎖定和性能的信息。

  十二、優化SQL

  揚SQL之長,其它事情交由應用去做。使用SQL服務器來做:

  找出基於WHERE子句的行。

  JOIN表

  GROUP BY

  ORDER BY

  DISTINCT

  不要使用SQL來做:

  檢驗數據(如日期)

  成為一只計算器

  技巧:

  明智地使用鍵碼。

  鍵碼適合搜索,但不適合索引列的插入/更新。

  保持數據為數據庫第三范式,但不要擔心冗余信息或這如果你需要更快的速度,創建總結表。

  在大表上不做GROUP BY,相反創建大表的總結表並查詢它。

  UPDATE table set count=count+1 where key_column=constant非常快。

  對於大表,或許最好偶爾生成總結表而不是一直保持總結表。

  充分利用INSERT的默認值。

  十三、不同SQL服務器的速度差別(以秒計)

  通過鍵碼讀取2000000行: NT Linux

  MySQL 367 249

  MySQL_odbc 464  

  db2_odbc 1206  

  informix_odbc 121126  

  ms-sql_odbc 1634  

  Oracle_odbc 20800  

  solid_odbc 877  

  Sybase_odbc 17614  

  插入350768行: NT Linux

  MySQL 381 206

  MySQL_odbc 619  

  db2_odbc 3460  

  informix_odbc 2692  

  ms-sql_odbc 4012  

  Oracle_odbc 11291  

  solid_odbc 1801  

  Sybase_odbc 4802  

  在上述測試中,MySQL配置8M高速緩存運行,其他數據庫以默認安裝運行。

  十四、重要的MySQL啟動選項

  back_log 如果需要大量新連接,修改它。

  thread_cache_size 如果需要大量新連接,修改它。

  key_buffer_size 索引頁池,可以設成很大。

  bdb_cache_size BDB表使用的記錄和鍵嗎高速緩存。

  table_cache 如果有很多的表和並發連接,修改它。

  delay_key_write 如果需要緩存所有鍵碼寫入,設置它。

  log_slow_querIEs 找出需花大量時間的查詢。

  max_heap_table_size 用於GROUP BY

  sort_buffer 用於ORDER BY和GROUP BY

  myisam_sort_buffer_size 用於REPAIR TABLE

  join_buffer_size 在進行無鍵嗎的聯結時使用。

  十五、優化表

  MySQL擁有一套豐富的類型。你應該對每一列嘗試使用最有效的類型。

  ANALYSE過程可以幫助你找到表的最優類型:SELECT * FROM table_name PROCEDURE ANALYSE()。

  對於不保存NULL值的列使用NOT NULL,這對你想索引的列尤其重要。

  將ISAM類型的表改為MyISAM。

  如果可能,用固定的表格式創建表。

  不要索引你不想用的東西。

  利用MySQL能按一個索引的前綴進行查詢的事實。如果你有索引INDEX(a,b),你不需要在a上的索引。

  不在長CHAR/VARCHAR列上創建索引,而只索引列的一個前綴以節省存儲空間。CREATE TABLE table_name (hostname CHAR(255) not null, index(hostname(10)))

  對每個表使用最有效的表格式。

  在不同表中保存相同信息的列應該有同樣的定義並具有相同的列名。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved