日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL性能优化步骤

發布時間:2025/3/21 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、條件查詢優化

針對于條件查詢,需要對查詢條件,及排序字段建立索引。

create index idx_id_username_roleid on t_user(id,username,role_id); create index idx_username_roleid on t_user(username,role_id); create index idx_roleid on t_user(role_id);

使用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性能优化步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。