(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...