select f.*
from (
select
regexp_replace(regexp_replace(a.kfreason,'[(][^()]*[)]'),'[(][^()]*[)]') kfreason,a.username,b.useralias,
b.post
from examdetail a
left join projectusers b on b.username = a.username and b.eiid = '4DE7F10F7B534AA8B77D836E42942FA8'
where
a.ewid in (
select aa.ewid from examworkbreed aa where aa.typeid = '10916'
and aa.eiid = '4DE7F10F7B534AA8B77D836E42942FA8' and aa.ebid <> '0' and aa.examajor = 'AFE237EB77F14468B26D7D5CB0097DE9'
)
) f
where instr(f.kfreason,'未答出值班員戴安全帽進入一次設備區檢查') > 0;
kfreason這欄位我使用regexp_replace去掉括號之后,在用個select嵌套.但是這樣很慢;
但如果直接不加select嵌套,直接這樣,速度就很快
select
regexp_replace(regexp_replace(a.kfreason,'[(][^()]*[)]'),'[(][^()]*[)]') kfreason,a.username,b.useralias,
b.post
from examdetail a
left join projectusers b on b.username = a.username and b.eiid = '4DE7F10F7B534AA8B77D836E42942FA8'
where
a.ewid in (
select aa.ewid from examworkbreed aa where aa.typeid = '10916'
and aa.eiid = '4DE7F10F7B534AA8B77D836E42942FA8' and aa.ebid <> '0' and aa.examajor = 'AFE237EB77F14468B26D7D5CB0097DE9'
) and instr(a.kfreason,'未答出值班員戴安全帽進入一次設備區檢查') > 0;
這是什么原因?
uj5u.com熱心網友回復:
看看執行計劃嘍,2個查詢分別是怎么走的uj5u.com熱心網友回復:
執行計劃還不會怎么看,這是第一個sql陳述句的執行計劃
這是第二個

感覺都差不多啊
uj5u.com熱心網友回復:
感覺你的這個和業務相關,那句關鍵字在不在括號里對業務有沒有影響,或都說有沒有可能在括號里沒有的話,那個正則基本沒什么用,
如果必須要用的話,那兩個正則可以合并為一個
uj5u.com熱心網友回復:
where instr(f.kfreason,'未答出值班員戴安全帽進入一次設備區檢查') > 0;這個條件在內層是不是可以過濾掉大量資料?是的話,進行替換的資料就會少了很多,效率自然會高
uj5u.com熱心網友回復:
這個意思就是
where f.kfreason like ‘%未答出值班員戴安全帽進入一次設備區檢查%’;
效率還不如LIKE
uj5u.com熱心網友回復:
你這個正則運算式也就是把()替換成標準的();主要是你的陳述句有錯誤的第7行 left join projectusers b on b.username = a.username and b.eiid = '4DE7F10F7B534AA8B77D836E42942FA8'
SQL 修改成這樣,效率高一些
select f.*
from (select
regexp_replace(regexp_replace(a.kfreason,'[(][^()]*[)]'),'[(][^()]*[)]') kfreason,a.username,b.useralias,
b.post
from examdetail a left join projectusers b
on b.username = a.username join
(select aa.ewid from examworkbreed aa where aa.typeid = '10916'
and aa.eiid = '4DE7F10F7B534AA8B77D836E42942FA8'
and (aa.ebid >'0' or aa.ebid <'0') -- <>會失去索引價值
and aa.examajor = 'AFE237EB77F14468B26D7D5CB0097DE9') c
on a.ewid=c.ewid
where
b.eiid = '4DE7F10F7B534AA8B77D836E42942FA8'
) f
where f.kfreason like '%未答出值班員戴安全帽進入一次設備區檢查%’;
uj5u.com熱心網友回復:
sql不走索引 增加一個函式索引會不會快些。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/106169.html
標籤:開發
上一篇:跟蹤告警日志不可用
下一篇:存盤程序執行報錯
