記一次業務中遇到的mysql語句的效能優化

2021-10-12 03:19:14 字數 1082 閱讀 5552

(1)生產環境的sql

select

o.*,d.sourceid,d.sourcename,d.sourcecode

,a.id,a.module_code,a.module_name,

case

when

( count(*) ) is null

then 0

else ( count(*) )

end hotcount

from

left join

on o.source = d.sourceid

left

join

on o.module_id = a.id

left join

where o.status='2'

group

(2)生產sql用時:5~6s

語句後,資料量為50條左右。資料量大大變小。

(3)再次優化後的sql如下所示

select

o.*,

d.sourceid,

d.sourcename,

d.sourcecode,

a.id,

a.module_code,

a.module_name,

e.num as hotcount

from

left join

where

再次優化後的sql為100~200ms之間,已經達到了要求。

再使用explain檢視執行計畫:

發現執行計畫裡用到了derived派生表,即上述的子查詢,派生表用到了覆蓋索引,其餘表也都用到了索引,各個表的掃瞄行數都比原來的掃瞄行數大大降低了。到此,優化完成。

1、事實上還可以對select *進行優化,只取需要的行數

2、上述截圖的explain的執行計畫,因為是在測試環境執行的,所以截圖裡掃瞄行數與實際生產環境的不一致,這裡只是舉例分析,大家可以據此自行分析。

mysql安裝一次 記一次mysql安裝

mysql 分為安裝版和壓縮版 2.安裝 2.1 解壓得到 mysql 8.0.15 winx64 資料夾 2.2 在mysql 8.0.15 winx64 資料夾下,新建配置檔案my.ini,內容 如下 mysqld 設定3306埠 port 3306 設定mysql的安裝目錄,這裡是唯一你需要改...

記一次mysql宕機

e warning pdo prepare mysql server has gone away pdo prepare mysql server has gone awayilluminate database queryexception sqlstate hy000 2002 connecti...

記一次安裝MySQL

之前在電腦上安裝過一次mysql,使用的公司的一鍵安裝指令碼,後來刪除了一遍,在安裝就會出錯了,提示無法啟動計算機上的 服務,查了一下,應該是以前的指令碼有殘留檔案,導致這個無法安裝。解決辦法 將mysql解壓檔案解壓出來後,放到要放的目錄,之後配置環境變數 d sunbox lib mysql b...