記錄一次sql優化查詢

2022-09-06 16:36:13 字數 2483 閱讀 4741

場景:關聯查詢,一張主表關聯4張表進行查詢。主表資料量是16萬,其中被關聯的一張表的數量是6萬。

遇到頁面響應速度過慢的情況,首先考慮是否是sql查詢緩慢引起的。

第一步開啟mysql的慢查詢日誌(網上教程很多,本篇文章不再贅述)

第二步分析慢查詢日誌,這裡要說下分析工具。常用的有兩種,一是mysql自帶的mysqldumpslow工具,二是pt-query-slow工具。後者需要自行安裝,下面針對兩種工具的使用進行說明:

執行mysqldumpslow,如果出現命令mysqldumpslow不存在的情況,需要進行如下處理(要清楚mysql的安裝位置):

ln -s /www/server/mysql/bin/mysqldumpslow /usr/bin/

簡單使用:

mysqldumpslow -t 10 mysql-slow.log

安裝:

yum install perl-dbi  

使用:

pt-query-digest  /www/server/data/mysql-slow.log

常見用法:

(1)分析最近12小時內的查詢

pt-query-digest --since=12h /www/server/data/mysql-slow.log > slow_report1.log

(2)分析指定時間範圍內的查詢

pt-query-digest /www/server/data/mysql-slow.log --since '2020-03-20 09:30:00' --until '2020-03-27 13:00:00'  > slow_report2.log

通過檢視找到耗時較長的sql:

select

`c`.*,

c.price unit_price,

d. name as category_name,

b.nickname creator,

a.nickname owner_name

from

`material` `c`

left join `category` `d` on `c`.`category_id` = `d`.`id`

left join `admin` `a` on `c`.`operator_id` = `a`.`id`

left join `admin` `b` on `c`.`creator_id` = `b`.`id`

left join `stock` `s` on `c`.`id` = `s`.`material_id`

where

`c`.`status` = '1'

and `c`.`company_id` = '1'

order by

`c`.`created_at` desc

limit 0,

10

對這條sql執行explain:

idselect_type

table

type

possible_keys

keykey_len

refrows

extra

1******

cref

idx_company_id,

idx_status

idx_company_id

4const

33872

1******

deq_ref

primary

primary

4skxx.c.category_id11

******

aeq_ref

primary

primary

4skxx.c.category_id

1using where

1******

beq_ref

primary

primary

4=skxx.c.category_id

1using where

1******

sall

1683

有關explain的使用,網上教程很多,這裡不再詳細介紹

記錄一次sql優化過程

對於我這種剛剛進入dba行業的人來說sql優化是一件很難的事情。所以今天看了一下別人優化的過程順手記錄的一筆。select distinct vi.policy no from odsdata.policy extend info ei,policy vehicle info vi,policy b...

一次SQL慢查詢記錄

前段時間,某個深夜,突然接到專案的告警 專案執行異常,檢視告警資訊是由於專案資料庫cpu使用率接近100 導致的。為此深夜中忙活了一陣,當個教訓,且記錄一次。現象 服務資料庫cpu使用率接近100 一直居高不下。原因 sql語句使用不合理的索引,導致資料庫中大量資料的排序,大資料量的記錄排序消耗盡c...

記錄一次SQL查詢語句

以前發現比較經典的句子,都是記錄在電腦上,我今天想搬到部落格上,在我看來,寫部落格真的是一件非常頭疼的事,它是內心的一道坎,我必須得跨過它。1 create table t jeff 2 id int notnull 3 vinnumber varchar 255 default null 4 ch...