mysql的優花其實是個艱難的工作,要搞的東西太多了,之前在
中摘了一些原則,最近對乙個100多萬條資料的表做優花時,有如下心得:
1) 取必須要用的資料
這裡對於select 語句中只選有用的字段,這樣的原則就肯定人人都知道的了。但關鍵的是,要從全域性考慮問題,比如我的這個應用
是每個新聞網頁的跟帖,一條新聞有很多很多人跟帖,平均有40-50條,那麼每天這麼多新聞,很多的跟帖記錄,但對於審帖
者,由於是每天上班工作的,每天他們會把當天的帖子審核掉,因此,在做記錄列表時,只需要選用出當前時間以內1-2天的記錄就可以了,
這裡已經是大大優化
2 ) 建好索引
這裡的學問太多,也太多文章講,這裡不說
3 ) mysql的優化
第三個工作才是mysql的優化,其實就是改my.ini,有如下幾點,歸納下.(我的是4g記憶體的雙核機器)
a 設定key_buffer_size
key_buffer_size
指定索引緩衝區的大小,這個值越高,索引可以使用的記憶體越多,一般為可用記憶體的25-30%,它決定索引處理的速度,尤其是索引讀的速度。通過檢查狀態值key_read_requests
和key_reads
,可以知道
key_buffer_size
設定是否合理。比例
key_reads
/ key_read_requests
應該盡可能的低,至少是
1:100
,1:1000
更好(上述狀態值可以使用
show status like 『key_read%』
獲得)。
key_buffer_size
只對myisam
表起作用。
即使你不使用
myisam
表,但是內部的
臨時磁碟表是
myisam
表,也要使用該值。可以使用檢查狀態值created_tmp_disk_tables
得知詳情。
對於1g記憶體的機器,如果不使用myisam表,推薦值是16m(8-64m)。
b max_connections數量
mysql建議使用table_cache=max_connection*n來設定tablecache,n為標準連線中表的數量
c table_cache
table_cache
指定表快取記憶體的大小。
每當mysql
訪問乙個表時,如果在表緩衝區中還有空間,該錶就被開啟並放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值open_tables
和opened_tables
,可以決定是否需要增加
table_cache
的值。如果你發現
open_tables
等於table_cache
,並且opened_tables
在不斷增長,那麼你就需要增加
table_cache
的值了(上述狀態值可以使用
show status like 『open%tables』
獲得)。注意
,不能盲目地把
table_cache
設定成很大的值。如果設定得太高,可能會造成檔案描述符不足,從而造成效能不穩定或者連線失敗。
對於有1g記憶體的機器,推薦值是128-256。
d 提高order by groud by的速度,通過設定sort_buufer變數進行控制,還可以增加read_rnd_buffer_size變數值,也可以增加read_buffer_size值,提高select的查詢速度
e query_cache_size
從4.0.1
開始,mysql
提供了查詢緩衝機制。使用查詢緩衝,
mysql
將select
語句和查詢結果存放在緩衝區中,今後對於同樣的
select
語句(區分大小寫),將直接從緩衝區中讀取結果。根據
mysql
使用者手冊,使用查詢緩衝最多可以達到
238%的效率。
通過檢查狀態值qcache_*
,可以知道
query_cache_size
設定是否合理(上述狀態值可以使用
show status like 『qcache%』
獲得)。如果
qcache_lowmem_prunes
的值非常大
,則表明經常出現緩衝不夠的情況,如果qcache_lowmem_prunes增長迅速,意味著很多快取因為記憶體不夠而被釋放,而不是因為相關表被更新。嘗試加大query_cache_size,盡量使qcache_lowmem_prunes零增長。
如果qcache_hits
的值也非常大,則表明查詢緩衝使用非常頻繁,此時需要增加緩衝大小;如果
qcache_hits
的值不大,則表明你的查詢重複率很低,這種情況下使用查詢緩衝反而會影響效率,那麼可以考慮不用查詢緩衝。此外,在
select
語句中加入sql_no_cache
可以明確表示不使用查詢緩衝。
mysql 優化心得
mysql的優花其實是個艱難的工作,要搞的東西太多了,之前在 中摘了一些原則,最近對乙個100多萬條資料的表做優花時,有如下心得 1 取必須要用的資料 這裡對於select 語句中只選有用的字段,這樣的原則就肯定人人都知道的了。但關鍵的是,要從全域性考慮問題,比如我的這個應用 是每個新聞網頁的跟帖,...
mysql中sql優化小心得
1,以前用mysql不多,不過寫sql時都會考慮效率,主要是考慮先盡量篩選主表的資料。而今天寫了個sql,從幾十萬條資料中做累計,還要和其他表結合獲得使用者資訊,為了簡潔寫成如下形式 select c.name,sum a.cnt from a,b,c where a.id b.uid and a....
mysql資料庫優化總結 心得
1.優化你的mysql查詢快取 在mysql伺服器上進行查詢,可以啟用高速查詢快取。讓資料庫引擎在後台悄悄的處理是提高效能的最有效方法之一。當同乙個查詢被執行多次時,如果結果是從快取中提取,那是相當快的。但主要的問題是,它是那麼容易被隱藏起來以至於我們大多數程式設計師會忽略它。在有些處理任務中,我們...