日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

MySQL性能优化步骤

發(fā)布時(shí)間:2025/3/21 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL性能优化步骤 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、SQL語句優(yōu)化

1、優(yōu)化count

每次分頁操作都要獲取一次count(),都需要掃描大量的行(意味著需要訪問大量的數(shù)據(jù))才能獲得精確的結(jié)果,因此可以增加匯總表,或者redis緩存來專門記錄該表對應(yīng)的記錄數(shù),這樣的話,就可以很輕松的實(shí)現(xiàn)匯總數(shù)據(jù)的查詢,而且效率很高,但是這種統(tǒng)計(jì)并不能保證百分之百的準(zhǔn)確。

創(chuàng)建一張表用來記錄日志表的總數(shù)據(jù)量:

create table log_counter( logcount bigint not null )

在每次插入數(shù)據(jù)之后,更新該表 :

<update id="updateLogCounter" > update log_counter set logcount = logcount + 1 </update>

在進(jìn)行分頁查詢時(shí), 獲取總記錄數(shù),從該表中查詢既可:

<select id="countLogFromCounter" resultType="long"> select logcount from log_counter limit 1 </select>

2、優(yōu)化limit

查詢越靠后的頁碼,查詢效率則越慢:

select * from operation_log 1 limit 3000000 , 10;

將上述SQL優(yōu)化為 :

select * from operation_log t , (select id from operation_log order by id limit 3000000,10) b where t.id = b.id ;

3、條件查詢優(yōu)化

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

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語句查看優(yōu)化效果:


可以看到無論哪種組合查詢都走了索引,查詢效率明顯提升。

4、優(yōu)化排序

在查詢數(shù)據(jù)時(shí),如果業(yè)務(wù)需求中需要我們對結(jié)果內(nèi)容進(jìn)行了排序處理 , 這個(gè)時(shí)候,我們還需要對排序的字段建立適當(dāng)?shù)乃饕? 來提高排序的效率 。

二、服務(wù)器優(yōu)化

1、MySQL主從復(fù)制和讀寫分離

服務(wù)器主從復(fù)制是指將主數(shù)據(jù)庫的DDL 和 DML 操作通過二進(jìn)制日志傳到從庫服務(wù)器中,然后在從庫上對這些日志重新執(zhí)行,從而使得從庫和主庫的數(shù)據(jù)保持同步。在Mysql主從復(fù)制的基礎(chǔ)上,可以使用讀寫分離來降低單臺Mysql節(jié)點(diǎn)的壓力,從而來提高訪問效率,對于讀寫分離的實(shí)現(xiàn),可以通過Spring AOP 來進(jìn)行動(dòng)態(tài)的切換數(shù)據(jù)源。

2、應(yīng)用服務(wù)器優(yōu)化

(1)緩存:可以在業(yè)務(wù)系統(tǒng)中使用redis來做緩存,緩存一些基礎(chǔ)性的數(shù)據(jù),來降低關(guān)系型數(shù)據(jù)庫的壓力,提高訪問效率。

(2)全文檢索:如果業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)量比較大(達(dá)到千萬級別),這個(gè)時(shí)候,如果再對數(shù)據(jù)庫進(jìn)行查詢,特別是進(jìn)行分頁查詢,速度將變得很慢(因?yàn)樵诜猪摃r(shí)首先需要count求合計(jì)數(shù)),為了提高訪問效率,這個(gè)時(shí)候,可以考慮加入Solr 或者 ElasticSearch全文檢索服務(wù),來提高訪問效率。

(3)非關(guān)系型數(shù)據(jù)庫:也可以考慮將非核心(重要)數(shù)據(jù),存在 MongoDB 中,這樣可以提高插入以及查詢的效率。


注:聯(lián)合索引的結(jié)構(gòu)

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

B+樹排序時(shí)先比較id,再比較username,最后比較role_id.

總結(jié)

以上是生活随笔為你收集整理的MySQL性能优化步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。