偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

數(shù)據(jù)庫 MySQL
新項目業(yè)務(wù)人員反饋說最近訂單發(fā)放模塊經(jīng)常很卡,導(dǎo)致總是有鎖的情況發(fā)生,在用慢查詢和開啟鎖監(jiān)控觀察后發(fā)現(xiàn)實際上只是單條查詢慢造成的阻塞鎖,這里考慮先對單條查詢做一下優(yōu)化。

新項目業(yè)務(wù)人員反饋說最近訂單發(fā)放模塊經(jīng)常很卡,導(dǎo)致總是有鎖的情況發(fā)生,在用慢查詢和開啟鎖監(jiān)控觀察后發(fā)現(xiàn)實際上只是單條查詢慢造成的阻塞鎖,這里考慮先對單條查詢做一下優(yōu)化。

一、優(yōu)化前的表結(jié)構(gòu)、數(shù)據(jù)量、SQL、執(zhí)行計劃、執(zhí)行時間

1. 表結(jié)構(gòu)

A表有90個字段,B表有140個字段。

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

2. 數(shù)據(jù)量

  1. select count(*) from A; 
  2. --166713 
  3. select count(*) from B; 
  4. --220810 

3. sql

開啟慢查詢觀察到慢sql如下,單條執(zhí)行只取200條記錄是在23秒左右。

  1. select ob.id, ob.customer, ob.order_no1, ob.accountingitems_code, ob.insert_date, ob.weight,  
  2. ob.volume, ob.qty, ob.project_code,ob.order_no2,ob.order_type1  
  3.  from A as ob  
  4. where ifnull(ob.project_code,'')<>'' and ifnull(ob.accountingitems_code,'')<>''  
  5. and ob.if_cost_proof='N'  
  6. and EXISTS (select 1 from B ol where ob.id=ol.order_base) limit 200; 

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

4. 執(zhí)行計劃

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

思路

這兩張表都是訂單表,全國各地的每天大概會產(chǎn)生十萬行左右,這里又是全掃,等后期達(dá)到上千萬的數(shù)據(jù)就GG了。目前只是看到這個sql上的問題,先考慮exists部分做一下改寫。

二、exists部分改寫

  1. select ob.id, ob.customer, ob.order_no1, ob.accountingitems_code, ob.insert_date, ob.weight,  
  2. ob.volume, ob.qty, ob.project_code,ob.order_no2,ob.order_type1  
  3.  from fsl_order_base as ob,fsl_order_base_line ol 
  4. where ob.id=ol.order_base and ob.if_cost_proof='N' and 
  5. ifnull(ob.project_code,'')<>'' and ifnull(ob.accountingitems_code,'')<>'' limit 200; 

執(zhí)行時間:耗時1.8秒

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

對應(yīng)的執(zhí)行計劃:

可以看到ob表走了主鍵索引

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

業(yè)務(wù)確認(rèn)結(jié)果符合需求,那就在這基礎(chǔ)上建一下索引吧!

三、ol表建索引

  1. create index idx_obl_id on fsl_order_base_line(order_base); 
  2. create index idx_ob_id_cost on fsl_order_base(id,if_cost_proof); 

加上去但實際上用不到這個索引,選擇去掉

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

四、查看執(zhí)行時間和執(zhí)行計劃

耗時1.1秒,可惜執(zhí)行計劃還是走了全掃,在對ob表建了索引實際上也用不到,最終只在ol表建了索引。

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

五、考慮用join改寫

把ob結(jié)果集縮小,然后再做關(guān)聯(lián)查,并測試是否可以用上索引。

  1. SELECT 
  2.  obc.id, 
  3.  obc.customer, 
  4.  obc.order_no1, 
  5.  obc.accountingitems_code, 
  6.  obc.insert_date, 
  7.  obc.weight, 
  8.  obc.volume, 
  9.  obc.qty, 
  10.  obc.project_code, 
  11.  obc.order_no2, 
  12.  obc.order_type1  
  13. FROM 
  14.  (select * from fsl_order_base AS ob where ob.if_cost_proof = 'N' and ifnull( ob.project_code, '' ) <> '' and ifnull( ob.accountingitems_code, '' ) <> '' ) obc 
  15.  join 
  16.  fsl_order_base_line ol  
  17.  on obc.id = ol.order_base limit 200; 

時間快了一點,但不是很明顯,先湊合吧

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

執(zhí)行計劃保持不變。

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

總結(jié)

建索引前因為走了主鍵索引,所以時間在1.6秒這樣,建索引后不走主鍵索引了,走ol表的索引,所以在1.5秒,然后縮小結(jié)果集去查的話就在1s這樣。

更重要的是這兩個表一個90個字段,一個150個字段,所以這兩個表的關(guān)聯(lián)查后期結(jié)果集應(yīng)該還是會很大,建議是弄成分區(qū)表的形式,表能拆分的話是最好的。這些長度不要直接給那么大,這么寬對性能都是有影響的。

記一次生產(chǎn)數(shù)據(jù)庫sql優(yōu)化案例--23秒優(yōu)化到0.9秒

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

2019-08-19 01:34:38

數(shù)據(jù)庫SQL數(shù)據(jù)庫優(yōu)化

2021-08-26 22:26:55

性能優(yōu)化技術(shù)

2019-12-16 07:18:42

數(shù)據(jù)庫SQL代碼

2018-12-06 16:25:39

數(shù)據(jù)庫服務(wù)器線程池

2019-11-18 13:42:55

MySQL數(shù)據(jù)庫遷移

2019-01-21 11:17:13

CPU優(yōu)化定位

2019-11-22 08:05:01

數(shù)據(jù)庫mysql分區(qū)

2019-12-12 10:38:10

mysql數(shù)據(jù)庫nnodb

2019-08-15 11:30:06

SQL數(shù)據(jù)庫ASH

2021-10-14 10:53:20

數(shù)據(jù)庫查詢超時

2019-07-25 08:30:58

數(shù)據(jù)庫服務(wù)器故障

2019-09-05 09:17:37

MySQL數(shù)據(jù)庫線程

2021-03-01 06:14:50

環(huán)境高并發(fā)延遲

2019-12-02 08:09:57

境數(shù)據(jù)庫連接超時自動回收

2019-09-08 17:52:10

數(shù)據(jù)庫log file sy等待事件

2023-11-29 12:12:24

Oceanbase數(shù)據(jù)庫

2019-04-04 15:00:40

SQL索引數(shù)據(jù)庫

2018-07-18 15:37:24

數(shù)據(jù)庫DB2故障處理

2021-07-30 07:28:16

SQL優(yōu)化日志

2020-09-25 07:57:42

生產(chǎn)事故系統(tǒng)
點贊
收藏

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