MySQL調優的一些簡單經驗

2021-09-02 01:27:39 字數 1700 閱讀 8115

分情況解決

後記工作中使用mysql資料庫,在十萬級的資料量下發下有一些查詢統計的sql執行異常慢,達到7秒左右,本來以為是網路問題,後來在本地、上線後伺服器環境(資料庫在內網)下仍然很慢,所以排查了一下,很簡單的就解決了;

使用的druid資料來源,自帶有sql監控功能還是比較好排查的;

其他資料來源如c3p0我還不知道怎麼記錄慢sql,是得補一下;hibernate也有慢sql的記錄功能,jfinal的好像也不知道;

不過可以在資料庫層面監控慢sql,比如mysql的set global long_query_time可以設定mysql日誌記錄執行時間大於該值的sql記錄;oracle功能更強大複雜,就不展開說了;

select

count(*) count,

b.organ_id organid,

e.name organname,

sum(if(d.mark = '01', 1, 0)) as a01,

sum(if(d.mark = '02', 1, 0)) as a02,

sum(if(d.mark = '03', 1, 0)) as a03,

sum(if(d.mark = '04', 1, 0)) as a04,

sum(if(d.mark = '05', 1, 0)) as a05,

sum(if(d.mark = '06', 1, 0)) as a06,

sum(if(d.mark = '07', 1, 0)) as a07,

sum(if(d.mark = '08', 1, 0)) as a08,

sum(if(d.mark = '09', 1, 0)) as a09,

sum(if(d.mark = '10', 1, 0)) as a10,

sum(if(d.mark = '11', 1, 0)) as a11,

sum(if(d.mark = '12', 1, 0)) as a12 ,

sum(if(d.mark = '13', 1, 0)) as a13

from

left join t_b_asset_type d on d.mark = c.asset_type

left join sys_organ e on e.id = b.organ_id

where

group by

b.organ_id

order by

e.name

該條件去掉後查詢時間在0.6s左右,相差比較大;但是該條件業務需要,未找到更合適的替換方案;接下來嘗試用explain語句對查詢進行分析

explain的用法:直接在要執行的sql語句前加explain關鍵字,會返回如下結果

id:select識別符。這是select的查詢序列號。

經過exlpain排查以後並沒有有效的解決問題,嘗試逐句分析也沒有什麼成果,後來還是聚焦max()函式,是查詢各個平台時間最晚的一條記錄,關鍵節點語句上面已經給出,刪除掉該語句後查詢時間減少到0.6s左右,在create_time列加上索引後時間優化不明顯,後來靈機一動,在create_time 和 orrgan_id列上加上聯合索引後查詢時間減少到1.4s左右

覺得還是防患於未然比較好,在資料庫設計階段,就考慮以後的查詢效率,根據實際業務情況設定好索引

mysql調優的一些方面

1.首先的一點就是可以做乙個mysql集群實現讀寫分離 2.查詢sql慢日誌,給一些表做索引 3.調整mysql引數 設定合理的key buffer size,它是指索引緩衝區的大小,決定了索引的處理速度。大概的分配為1g設定128m,2g為256m,依此類推。檢視key buffer size的值...

mysql調優的一些方面

1.首先的一點就是可以做乙個mysql集群實現讀寫分離 2.查詢sql慢日誌,給一些表做索引 3.調整mysql引數 設定合理的key buffer size,它是指索引緩衝區的大小,決定了索引的處理速度。大概的分配為1g設定128m,2g為256m,依此類推。檢視key buffer size的值...

mysql調優經驗

訪問量越來越大,mysql自然成為瓶頸,因此最近我一直在研究 mysql 的優化,第一步自然想到的是 mysql 系統引數的優化,作為乙個訪問量很大的 日20萬人次以上 的資料庫系統,不可能指望 mysql 預設的系統引數能夠讓 mysql執行得非常順暢。通過在網路上查詢資料和自己的嘗試,我認為以下...