Monty說MySQL的優化(三)

2021-06-27 09:38:12 字數 2120 閱讀 6814

本文是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 ...