本文是monty
在o'reilly open source convention 2000大會上的演講之三,涉及維護、優化sql 、不同sql伺服器的速度差別、重要的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行: ntlinux
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 在進行無鍵嗎的聯結時使用。
十五、優化表
Monty說MySQL的優化(四)
十六 mysql如何次儲存資料 數 據庫 以目錄儲存。表以檔案儲存。列以變長或定長格式儲存在檔案中。對bdb表,資料以頁面形式儲存。支援基於記憶體的表。資料庫和錶可在不同的磁碟上用符號連線起來。在windows 上,mysql支援用.sym檔案內部符號連線資料庫。十七 mysql表型別 heap表 ...
MySQL優化總結(三)
先來複習一下資料庫設計三正規化 第一正規化 當關係模式r的所有屬性都不能在分解為更基本的資料單位時,稱r是滿足第一正規化的,簡記為1nf。滿足第一正規化是關係模式規範化的最低要 求,否則,將有很多基本操作在這樣的關係模式中實現不了。第二正規化 如果關係模式r滿足第一正規化,並且r得所有非主屬性都完全...
簡易mysql優化 優化 MySQL 簡單三個技巧
技巧 1 為臨時表分配足夠的記憶體 在某些情況下,伺服器在處理語句時會建立內部臨時表。臨時表用於內部操作如group by和distinct,還有一些order by查詢以及union和from子句 派生表 中的子查詢。這些都是在記憶體中建立的記憶體表。記憶體中臨時表的最大大小由tmp table ...