sql語句的優化案例分析
今天一測試人員提供過來一sql語句,結構如下:
SELECT t.* FROM v_service t,(SELECT DISTINCT icpcode,icpservid
FROM t_servcate2serv t1,(SELECT cateid FROM t_servcate
START WITH cateid=1 and showflag=1 CONNECT BY PRIOR cateid = parentid
and showflag=1) t2 WHERE t1.cateid=t2.cateid) t3
WHERE t.icpcode=t3.icpcode AND t.icpservid=t3.icpservid and (t.ServStatus='A' OR t.servstatus ='P' or t.servStatus='B' ) and (t.OnDemandFlag !=1 and t.OnDemandFlag!=2) and (t.accessmodeid=2 or t.accessmodeid=5 or ((t.accessmodeid=3 or t.accessmodeid=4) and (t.SERVTYPE=2 or t.SERVTYPE=3 or t.SERVTYPE=9 or t.SERVTYPE=0) ));
其中v_service是一檢視,內容如下:
create or replace view v_service
(icpcode, spname, spshortname, servidalias, icpservid, servname, servstatus, servattr, umflag, servtype, usagedesc, wwwurl, introurl, chargetype, price, chargedesc, starttime, endtime, servdesc, csrtel, spurl, accessmodeid, freeusetype, offlinedesc, offlinestate, offlinetime, freeusecount, ondemandflag, servicelogo, grouptype, servgroupid, type, specorderflag, specorderurl, brand, demourl, servcatid, freeurl)
as
select
t1.icpcode,t3.spname,t3.spshortname spshortname,T3.SERVIDALIAS,t1.icpservid,t1.servname, t1.servstatus,t1.ServAttr,
t1.umflag,T1.servtype,t1.UsageDesc,t1.wwwurl,t1.introURL, t1.ChargeType,t1.Price,t1.ChargeDesc,
t1.StartTime starttime,t1.EndTime,nvl(t2.servdesc,t1.servdesc) servdesc ,t3.csrtel,T3.CSRURL,
t4.ACCESSMODEID,t1.FREEUSETYPE,t1.OFFLINEDESC,t1.OFFLINESTATE,t1.OFFLINETIME,t1.FREEUSECOUNT,t1.ONDEMANDFLAG,
t1.SERVICELOGO,t7.GROUPTYPE,t7.SERVGROUPID,t7.TYPE,t1.SPECORDERFLAG,t1.SPECORDERURL,t2.brand,t2.demoURL,t1.SERVCATID,
w.freeurl
from service t1,t_servicemod t2,spinfo t3 ,SERVICE_ACCESS_MODE t4,
(select t6.ICPCODE,t6.ICPSERVID,t5.SERVGROUPID,t5.GROUPTYPE,t6.TYPE
from SERVICEGROUP t5,GROUP_SERVICE t6 where t5.SERVGROUPID=t6.SERVGROUPID) t7,
wap_service w
where t1.icpcode=t2.icpcode(+) and t1.icpservid=t2.icpservid(+) and
t1.icpcode=t3.spid(+) and t1.icpcode=t4.icpcode(+) and t1.icpservid=t4.icpservid(+) and
t1.ICPCODE=t7.icpcode(+) and t1.ICPSERVID=t7.icpservid(+) and
t1.ICPCODE=w.icpcode(+) and t1.ICPSERVID=w.icpservid(+) and
(t1.ServStatus='A' OR t1.servstatus ='P' or t1.servStatus='B') and
(t1.OnDemandFlag !=1 and t1.OnDemandFlag!=2) and
(t4.accessmodeid=2 or t4.accessmodeid=5 or (
(t4.accessmodeid=3 or t4.accessmodeid=4) and
(t1.SERVTYPE=2 or t1.SERVTYPE=3 or t1.SERVTYPE=9 or t1.servtype=0)
)
);
我暈,這麼複雜的sql語句也敢放在現網上執行,非得把資料庫搞塌掉!趕緊優化之!
這個查詢語句的效能消耗主要在檢視v_service上!
將檢視v_service改為一個物化檢視(materialized view),然後每天定時重新整理同步一次。
基於程式碼的改動量最小化,可直接取物化檢視名為v_service,將原檢視drop掉。
步驟如下:
1、建物化檢視(建之前需dba賦create materialized view的系統許可權給pas使用者)
create materialized view v_service
as
select 。。。。。。(同建檢視的select語句)
--建索引
create index indx_mv_service on v_service(icpcode,icpservid);
--定時重新整理,可一天一次(根據需要來定),放在job中定時呼叫
exec dbms_mview.refresh(list => 'v_service');
如下的對比結果供參考:
--v_service是檢視時
SQL> select count(*) from v_service;
COUNT(*)
----------
25794
已用時間: 00: 00: 01.03
--v_service是物化檢視時
SQL> select count(*) from v_service;
COUNT(*)
----------
25794
已用時間: 00: 00: 00.047
當然除了物化檢視外,其他的索引、臨時表和表關聯等都是要考慮的,在此就不一一闡述。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/38542/viewspace-882821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL優化案例-單表分頁語句的優化(八)SQL優化
- SQL語句優化SQL優化
- MYSQL SQL語句優化MySql優化
- sql語句效能優化SQL優化
- 優化 SQL 語句的步驟優化SQL
- MySQL之SQL語句優化MySql優化
- [20201210]sql語句優化.txtSQL優化
- [20200320]SQL語句優化的困惑.txtSQL優化
- [20181114]一條sql語句的優化.txtSQL優化
- Oracle優化案例-單表分頁語句的優化(八)Oracle優化
- Sql語句本身的優化-定位慢查詢SQL優化
- [20200324]SQL語句優化的困惑2.txtSQL優化
- SQL語句優化的原則與方法QOSQL優化
- 《MySQL慢查詢優化》之SQL語句及索引優化MySql優化索引
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- MySQL 52個SQL效能優化策略SQL語句彙總MySql優化
- 資料庫查詢優化:使用explain分析sql語句執行效率資料庫優化AISQL
- SQL最佳化案例-單表分頁語句的最佳化(八)SQL
- [20211229]toad下優化sql語句注意的問題.txt優化SQL
- soar-PHP - SQL 語句優化器和重寫器的 PHP 擴充套件包、 方便框架中 SQL 語句調優PHPSQL優化套件框架
- SQL語句最佳化SQL
- sql語句執行順序與效能優化(1)SQL優化
- MySql常用30種SQL查詢語句優化方法MySql優化
- Mysql 52條SQL語句效能優化策略彙總MySql優化
- [20201105]再分析sql語句.txtSQL
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- MySQL SQL優化案例(一)MySql優化
- sql語句執行緩慢分析SQL
- [20211221]分析sql語句遇到的問題.txtSQL
- MySQL——優化ORDER BY語句MySql優化
- SQL優化案例-使用with as優化Subquery Unnesting(七)SQL優化
- 騰訊雲TDSQL PostgreSQL版 -最佳實踐 |優化 SQL 語句SQL優化
- SQL優化案例-union代替or(九)SQL優化
- SQL語句SQL
- SQL語句IN的用法SQL
- MySQL系列6 - join語句的優化MySql優化