自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

數(shù)據(jù)庫(kù) MySQL
一打開科技類論壇,最??吹降奈恼轮黝}就是MySQL性能優(yōu)化了,為什么要優(yōu)化呢?今天小編對(duì)MySQL優(yōu)化總結(jié)了一些心得,希望在大家之后的工作中能有所有幫助!

一打開科技類論壇,最??吹降奈恼轮黝}就是MySQL性能優(yōu)化了,為什么要優(yōu)化呢?

因?yàn)椋?/p>

  • 數(shù)據(jù)庫(kù)出現(xiàn)瓶頸,系統(tǒng)的吞吐量出現(xiàn)訪問速度慢
  • 隨著應(yīng)用程序的運(yùn)行,數(shù)據(jù)庫(kù)的中的數(shù)據(jù)會(huì)越來越多,處理時(shí)間變長(zhǎng)
  • 數(shù)據(jù)讀寫速度緩慢

就是咱們說的“性能問題”,程序員一遇到它總是焦頭爛額!

今天小編對(duì)MySQL優(yōu)化總結(jié)了一些心得,希望在大家之后的工作中能有所有幫助!

[[266750]]

like 前導(dǎo)符優(yōu)化

like模糊查詢形如'%AAA%'和'%AAA'將不會(huì)使用索引,但是業(yè)務(wù)上不可避免可能又需要使用到這種形式。

[[266751]]

通常的方法有兩種:

  • 優(yōu)化方案一:使用覆蓋索引,即查詢出的列只是用索引就可以獲取,而無須查詢表記錄,這樣也走了索引;
  • 優(yōu)化方案二:使用locate函數(shù)或者position函數(shù)代替like查詢:如table.field like '%AAA%'可以改為locate('AAA', table.field) > 0或POSITION('AAA' IN table.field)>0

in 和 exist

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

示例一:

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

示例二:

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

not in 和 not exist

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

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

子查詢優(yōu)化

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

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

straight_join

mysql hint:

Mysql 優(yōu)化器在處理多表的關(guān)聯(lián)的時(shí)候,很有可能會(huì)選擇錯(cuò)誤的驅(qū)動(dòng)表進(jìn)行關(guān)聯(lián),導(dǎo)致了關(guān)聯(lián)次數(shù)的增加,從而使得sql語(yǔ)句執(zhí)行變得非常的緩慢。

這個(gè)時(shí)候需要有經(jīng)驗(yàn)的DBA進(jìn)行判斷,選擇正確的驅(qū)動(dòng)表,這個(gè)時(shí)候 straightjoin 就起了作用了,下面我們來看一看使用straight_join進(jìn)行優(yōu)化的案例:

嘗試采用user表做驅(qū)動(dòng)表,使用straight_join強(qiáng)制連接順序:

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

高效分頁(yè)

傳統(tǒng)分頁(yè):

  1. select * from table limit 10000,10 

limit原理:

  • Limit 10000,10
  • 偏移量越大則越慢

推薦分頁(yè):

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

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

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

force index

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

DBA大牛MySQL優(yōu)化心得,語(yǔ)句執(zhí)行加速就是這么簡(jiǎn)單!

count的優(yōu)化

按照效率排序的話,count(字段)

總結(jié)

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

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2017-11-28 15:29:04

iPhone X網(wǎng)頁(yè)適配

2021-05-24 10:50:10

Git命令Linux

2020-06-16 10:57:20

搭建

2024-08-28 08:42:21

API接口限流

2016-07-22 15:12:12

Win10技巧重裝

2020-04-20 10:47:57

Redis數(shù)據(jù)開發(fā)

2023-08-26 21:42:08

零拷貝I/O操作

2021-12-27 07:31:37

JavaNeo4J數(shù)據(jù)庫(kù)

2023-07-27 08:26:36

零拷貝I/O操作

2021-10-28 19:23:27

界面嵌入式 UI

2024-02-27 08:14:51

Nginx跨域服務(wù)

2019-05-13 08:24:58

數(shù)據(jù)庫(kù)MySQLInnoDB

2021-02-26 10:21:35

比特幣投資金融

2013-06-09 10:34:24

華為網(wǎng)絡(luò)規(guī)劃企業(yè)ICT

2020-07-27 07:00:00

超文本鏈接Word文檔網(wǎng)絡(luò)

2024-09-09 11:35:35

2019-10-09 08:52:59

SQLMySQL數(shù)據(jù)庫(kù)

2015-06-30 12:53:40

秒殺應(yīng)用MySQL數(shù)據(jù)庫(kù)優(yōu)化

2017-11-06 16:30:33

開源

2020-06-17 11:42:50

異常解析器Spring MVC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)