MySQL性能优化步骤
一、SQL語句優化
1、優化count
每次分頁操作都要獲取一次count(),都需要掃描大量的行(意味著需要訪問大量的數據)才能獲得精確的結果,因此可以增加匯總表,或者redis緩存來專門記錄該表對應的記錄數,這樣的話,就可以很輕松的實現匯總數據的查詢,而且效率很高,但是這種統計并不能保證百分之百的準確。
創建一張表用來記錄日志表的總數據量:
create table log_counter( logcount bigint not null )在每次插入數據之后,更新該表 :
<update id="updateLogCounter" > update log_counter set logcount = logcount + 1 </update>在進行分頁查詢時, 獲取總記錄數,從該表中查詢既可:
<select id="countLogFromCounter" resultType="long"> select logcount from log_counter limit 1 </select>2、優化limit
查詢越靠后的頁碼,查詢效率則越慢:
select * from operation_log 1 limit 3000000 , 10;將上述SQL優化為 :
select * from operation_log t , (select id from operation_log order by id limit 3000000,10) b where t.id = b.id ;3、條件查詢優化
針對于條件查詢,需要對查詢條件,及排序字段建立索引。
使用explain語句查看優化效果:
可以看到無論哪種組合查詢都走了索引,查詢效率明顯提升。
4、優化排序
在查詢數據時,如果業務需求中需要我們對結果內容進行了排序處理 , 這個時候,我們還需要對排序的字段建立適當的索引, 來提高排序的效率 。
二、服務器優化
1、MySQL主從復制和讀寫分離
服務器主從復制是指將主數據庫的DDL 和 DML 操作通過二進制日志傳到從庫服務器中,然后在從庫上對這些日志重新執行,從而使得從庫和主庫的數據保持同步。在Mysql主從復制的基礎上,可以使用讀寫分離來降低單臺Mysql節點的壓力,從而來提高訪問效率,對于讀寫分離的實現,可以通過Spring AOP 來進行動態的切換數據源。
2、應用服務器優化
(1)緩存:可以在業務系統中使用redis來做緩存,緩存一些基礎性的數據,來降低關系型數據庫的壓力,提高訪問效率。
(2)全文檢索:如果業務系統中的數據量比較大(達到千萬級別),這個時候,如果再對數據庫進行查詢,特別是進行分頁查詢,速度將變得很慢(因為在分頁時首先需要count求合計數),為了提高訪問效率,這個時候,可以考慮加入Solr 或者 ElasticSearch全文檢索服務,來提高訪問效率。
(3)非關系型數據庫:也可以考慮將非核心(重要)數據,存在 MongoDB 中,這樣可以提高插入以及查詢的效率。
注:聯合索引的結構
create index idx_id_username_roleid on t_user(id,username,role_id);B+樹排序時先比較id,再比較username,最后比較role_id.
總結
以上是生活随笔為你收集整理的MySQL性能优化步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Arrays常见用法
- 下一篇: linux cmake编译源码,linu