真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

一打開科技類論壇,最常看到的文章主題就是MySQL性能優(yōu)化了,為什么要優(yōu)化呢?
因為:
數(shù)據(jù)庫出現(xiàn)瓶頸,系統(tǒng)的吞吐量出現(xiàn)訪問速度慢
隨著應(yīng)用程序的運行,數(shù)據(jù)庫的中的數(shù)據(jù)會越來越多,處理時間變長
數(shù)據(jù)讀寫速度緩慢
就是咱們說的“性能問題”,程序員一遇到它總是焦頭爛額!
今天我對MySQL優(yōu)化總結(jié)了一些心得,希望在大家之后的工作中能有所有幫助!
like 前導(dǎo)符優(yōu)化
like模糊查詢形如'%AAA%'和'%AAA'將不會使用索引,但是業(yè)務(wù)上不可避免可能又需要使用到這種形式。
通常的方法有兩種:
方案一:使用覆蓋索引,即查詢出的列只是用索引就可以獲取,而無須查詢表記錄,這樣也走了索引;
方案二:使用locate函數(shù)或者position函數(shù)代替like查詢,如table.field like '%AAA%'可以改為locate('AAA', table.field) > 0或POSITION('AAA' IN table.field)>0

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)沂南免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

#in 和 exist
如果查詢的兩個表大小相當(dāng),那么用in和exists差別不大。如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:例如:表A(小表),表B(大表)

示例一:
DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

示例二:
DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

not in 和 not exist

如果查詢語句使用了not in 那么內(nèi)外表都進行全表掃描,沒有用到索引;而not exist 的子查詢依然能用到表上的索引。所以無論哪個表大,用not exists都比not in要快!

DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

子查詢優(yōu)化

1)MySQL 5.6 之前的版本對子查詢處理:不會將查詢的結(jié)果集計算出來用作與其他表做join,outer表每掃描一條數(shù)據(jù),子查詢都會被重新執(zhí)行一遍。
2)MySQL 5.6 對子查詢的處理 :將子查詢的結(jié)果集 cache 到臨時表里,臨時表索引主要用來移除重復(fù)記錄,并且隨后也可能用于做join查詢,這種技術(shù)在 5.6 中叫做物化的子查詢,物化子查詢可以看到select_type字段為subquery,而在 5.5 里為DEPENDENT SUBQUERY。
3)子查詢一般都可以改成表的關(guān)聯(lián)查詢,子查詢會有臨時表的創(chuàng)建、銷毀,效率低下。

DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

straight_join

mysql hint:mysql 優(yōu)化器在處理多表的關(guān)聯(lián)的時候,很有可能會選擇錯誤的驅(qū)動表進行關(guān)聯(lián),導(dǎo)致了關(guān)聯(lián)次數(shù)的增加,從而使得sql語句執(zhí)行變得非常的緩慢。
這個時候需要有經(jīng)驗的DBA進行判斷,選擇正確的驅(qū)動表,這個時候 straightjoin 就起了作用了,下面我們來看一看使用straight_join進行優(yōu)化的案例。
嘗試采用user表做驅(qū)動表,使用straight_join強制連接順序:
DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

高效分頁

1)傳統(tǒng)分頁
select * from table limit 10000,10
2)limit原理
Limit 10000,10
偏移量越大則越慢

3)推薦分頁
DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

復(fù)雜關(guān)聯(lián)SQL的優(yōu)化

1、首先查詢返回的結(jié)果集,通常查詢返回的結(jié)果集很少,是有優(yōu)化的空間的。
2、通過查看執(zhí)行計劃,查看優(yōu)化器選擇的驅(qū)動表,從執(zhí)行計劃的rows可以大致反應(yīng)出問題的所在。
3、搞清各表的關(guān)聯(lián)關(guān)系,查看關(guān)聯(lián)字段是否有合適的索引。
4、使用straight_join關(guān)鍵詞來強制調(diào)整驅(qū)動表的選擇,對優(yōu)化的想法進行驗證。
5、如果條件允許,對復(fù)雜的SQL進行拆分。盡可能越簡單越好。

force index

有時優(yōu)化器可能由于統(tǒng)計信息不準(zhǔn)確等原因,沒有選擇最優(yōu)的執(zhí)行計劃,可以人為改變mysql的執(zhí)行計劃,例如:

DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?

count的優(yōu)化

按照效率排序的話,count(字段)),所以我建議你,盡量使用count()。

總結(jié)

MySQL 性能優(yōu)化 最主要是理解 innodb 的索引原理及結(jié)構(gòu)及 SQL 的執(zhí)行計劃,在不斷累積經(jīng)驗的基礎(chǔ)上熟能生巧。

喜歡文章記得點個贊,感謝支持!


分享標(biāo)題:DBA大牛告訴你,如何讓MySQL語句執(zhí)行加速?
標(biāo)題路徑:http://weahome.cn/article/ijhsgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部