mysql 優化心得

2021-06-15 05:27:27 字數 2929 閱讀 9242

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表,推薦值是16m8-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記憶體的機器,推薦值是128256

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伺服器上進行查詢,可以啟用高速查詢快取。讓資料庫引擎在後台悄悄的處理是提高效能的最有效方法之一。當同乙個查詢被執行多次時,如果結果是從快取中提取,那是相當快的。但主要的問題是,它是那麼容易被隱藏起來以至於我們大多數程式設計師會忽略它。在有些處理任務中,我們...