Optimize a query
i have query which is taking too much time(54 min) .the main reason of getting slow is that table is too huge.
INSERT INTO Table1 (Col1,Col2,Col3,Col4,Col5,Col6)
(SELECT DISTINCT "Col1","Col2","Col3","Col4","Col5","Col6"
FROM Table2
WHERE "Col6">0 AND "Col1"<9999 AND "paraDate">
(SELECT collDate FROM Table3 WHERE "Col1"=Col1))
UNION
(SELECT DISTINCT "Col1","Col2","Col3","Col4","Col5","Col6"
FROM Table10
WHERE "Col6">0 AND "Col1"<9999 AND "paraDate">
(SELECT colDate FROM Table3 WHERE "Col1"=Col1))
UNION
(SELECT "Col1","Col2","Col3","Col4","Col5","Col6"
FROM Table4
WHERE "Col6">0 AND "Col1"<9999
MINUS
SELECT Col1,Col2,Col3,Col4,Col5,Col6
FROM Table5)
UNION
(SELECT "Col1","Col2","Col3","Col4","Col5","Col6"
FROM Table6
WHERE "Col6">0 AND "Col1"<9999
MINUS
SELECT Col1,Col2,Col3,Col4,Col5,Col6
FROM Table7)
UNION
(SELECT a."Col1",a."Col2",a."Col3",a."Col4",a."Col5",a."Col6"
FROM Table8 a, Table9 b
WHERE a."Col6">0 AND a."Col1"<9999
AND a."Col1"=b.Col1
AND a."Col2"=b.Col2
AND a."Col3"=b.Col3
AND a."Col4"=b.Col4
AND a."Col5"=b.Col5
AND a."Col6"=b.Col6)
i want to optimize it.
Hi,
Firstly, I would say/ask, can you use "UNION ALL" instead of "UNION". Basically you are taking union of 5-6 queries which will try to take only unique values. It is a costly operation. If you do not expect to get same values of col1, col2.....col6 from Table2,10,4,5,6,7,8,9, then use UNION ALL, it will save some good time. In short, understand the difference between UNION and UNION ALL and apply it here, if possible.
I guess, you have changed the original/actual table and column names before posting the query on the forum for anonymity, which is fair enough. But as we have no idea about the indexes on various tables, it is very difficult to comment.
Regards
Similar Messages
-
Help needed to optimize the query
Help needed to optimize the query:
The requirement is to select the record with max eff_date from HIST_TBL and that max eff_date should be > = '01-Jan-2007'.
This is having high cost and taking around 15mins to execute.
Can anyone help to fine-tune this??
SELECT c.H_SEC,
c.S_PAID,
c.H_PAID,
table_c.EFF_DATE
FROM MTCH_TBL c
LEFT OUTER JOIN
(SELECT b.SEC_ALIAS,
b.EFF_DATE,
b.INSTANCE
FROM HIST_TBL b
WHERE b.EFF_DATE =
(SELECT MAX (b2.EFF_DATE)
FROM HIST_TBL b2
WHERE b.SEC_ALIAS = b2.SEC_ALIAS
AND b.INSTANCE =
b2.INSTANCE
AND b2.EFF_DATE >= '01-Jan-2007')
OR b.EFF_DATE IS NULL) table_c
ON table_c.SEC_ALIAS=c.H_SEC
AND table_c.INSTANCE = 100;To start with, I would avoid scanning HIST_TBL twice.
Try this
select c.h_sec
, c.s_paid
, c.h_paid
, table_c.eff_date
from mtch_tbl c
left
join (
select sec_alias
, eff_date
, instance
from (
select sec_alias
, eff_date
, instance
, max(eff_date) over(partition by sec_alias, instance) max_eff_date
from hist_tbl b
where eff_date >= to_date('01-jan-2007', 'dd-mon-yyyy')
or eff_date is null
where eff_date = max_eff_date
or eff_date is null
) table_c
on table_c.sec_alias = c.h_sec
and table_c.instance = 100; -
Need help on optimization of query
Basically I had some query which should have been optimized. I did some optimization, but I guess it could be optimized more. Please help
DATA_
PK - ID
FK - ID (HIER ID)
VAL nullable
ATTR1 not null
ATTR2 not null
HIER
PK -ID
L1 - not null
L2 - not null
L3 - not null
WITH data_ AS
SELECT 1 ID, 20 val, 1 attr1, 1 attr2
FROM DUAL
UNION ALL
SELECT 2, 30, 0, 1
FROM DUAL
UNION ALL
SELECT 3, 40, 1, 1
FROM DUAL
UNION ALL
SELECT 4, 50, 0, 0
FROM DUAL
UNION ALL
SELECT 5, 60, 1, 0
FROM DUAL
UNION ALL
SELECT 6, 70, 0, 1
FROM DUAL
UNION ALL
SELECT 7, 80, 1, 1
FROM DUAL
UNION ALL
SELECT 8, 10, 1, 0
FROM DUAL
UNION ALL
SELECT 9, 15, 1, 1
FROM DUAL),
hier AS
SELECT 1 ID, 11 l1, 21 l2, 31 l3
FROM DUAL
UNION ALL
SELECT 2, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 3, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 4, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 5, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 6, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 7, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 8, 14, 23, 32
FROM DUAL
UNION ALL
SELECT 9, 11, 21, 31
FROM DUAL)
SELECT 'ALL' lev, SUM (val) avg_
FROM data_
UNION ALL
SELECT 'ATTR1 = ' || attr1, SUM (val)
FROM data_
GROUP BY attr1
UNION ALL
SELECT 'ATTR2 = ' || attr2, SUM (val)
FROM data_
GROUP BY attr2
UNION ALL
SELECT 'L3 = ' || l3, SUM (val)
FROM data_ d, hier h
WHERE d.ID = h.ID AND l3 IN (SELECT l3
FROM hier
WHERE l1 = :l1)
GROUP BY l3
UNION ALL
SELECT 'L2 = ' || l2, SUM (val)
FROM data_ d, hier h
WHERE d.ID = h.ID AND l2 IN (SELECT l2
FROM hier
WHERE l1 = :l1)
GROUP BY l2
UNION ALL
SELECT 'L1 = ' || l1, SUM (val)
FROM data_ d, hier h
WHERE d.ID = h.ID AND l1 = :l1
GROUP BY l1
UNION ALL
SELECT 'ID = ' || h.ID, val
FROM data_ d, hier h
WHERE d.ID = h.ID AND l1 = :l1
Now it looks like
WITH data_ AS
SELECT 1 ID, 20 val, 1 attr1, 1 attr2
FROM DUAL
UNION ALL
SELECT 2, 30, 0, 1
FROM DUAL
UNION ALL
SELECT 3, 40, 1, 1
FROM DUAL
UNION ALL
SELECT 4, 50, 0, 0
FROM DUAL
UNION ALL
SELECT 5, 60, 1, 0
FROM DUAL
UNION ALL
SELECT 6, 70, 0, 1
FROM DUAL
UNION ALL
SELECT 7, 80, 1, 1
FROM DUAL
UNION ALL
SELECT 8, 10, 1, 0
FROM DUAL
UNION ALL
SELECT 9, 15, 1, 1
FROM DUAL),
hier AS
SELECT 1 ID, 11 l1, 21 l2, 31 l3
FROM DUAL
UNION ALL
SELECT 2, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 3, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 4, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 5, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 6, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 7, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 8, 14, 23, 32
FROM DUAL
UNION ALL
SELECT 9, 11, 21, 31
FROM DUAL),
level_id AS
(SELECT 11 l
FROM DUAL)
SELECT DECODE (GROUPING_ID (attr2, attr1),
1, 'ATTR2 = ' || attr2,
2, 'ATTR1 = ' || attr1,
3, 'All'
) lev,
SUM (val)
FROM data_
GROUP BY CUBE (attr2, attr1)
HAVING GROUPING_ID (attr2, attr1) > 0
UNION ALL
SELECT lev, val
FROM (SELECT DECODE (GROUPING_ID (d.ID, l1, l2, l3),
11, 'L1 = ' || l1,
13, 'L2 = ' || l2,
14, 'L3 = ' || l3,
'ID = ' || d.ID
) lev,
SUM (val) val
FROM data_ d, hier h, level_id
WHERE d.ID = h.ID AND h.l3 IN (SELECT h1.l3
FROM hier h1
WHERE h1.l1 = l)
GROUP BY CUBE (d.ID, l3, l2, l1)
HAVING (h.l1 IS NULL OR l1 = l)
AND GROUPING_ID (d.ID, l1, l2, l3) IN (14, 13, 11, 0)
AND (h.l2 IS NULL OR h.l2 = (SELECT UNIQUE h1.l2
FROM hier h1
WHERE h1.l1 = l))
ORDER BY GROUPING_ID (d.ID, l1, l2, l3) DESC)Nobody can optimize you query just from having the query. We don't know anything about your database, your data, your database configuration, table structures, indexes, or what the query is supposed to achieve etc. etc. etc.
Take a look at this thread...
When your query takes too long ... -
Hi,
This below query is taking more than 1hour. So I want to optimize this query.Any suggestion is appriciated.
In Table customer_details total number of records are 40,000. Among which custno with id='J' are 7000.
select distinct(A.custno)
from
(select distinct custno,id,
case
when id='I'
then 0
else 1
end as myid from customer_details where custno not in
(select custno from customer_details where id='J'))A
group by A.custno
having sum(A.myid)>0Why instead of
from customer_details
where custno not in (select custno
from customer_details
where id = 'J')
...not simply
from customer_details
where custno != 'J'
...? -
I am trying to create a multi provider ? how to optimize my query performan
hi,
I am trying to creating a multi provider using four ods ? can anyone let me know how to optimize my query performance. Since my query takes a lot of time to get executed.
If anyone has any docs for query optimization that is built based on multi provider pls do send it to my email id [email protected]
regds
harithahi wond,
Thanxs a lot for the quick response. Can you let me know how to create secondary indexes on ods and about partioning to be carried out.
if u have any docs or url can you pls share. my email id [email protected]
regds
haritha -
Need to optimize a query....
select AC.ACCT_ID,
AC.EFF_STR_DT AC_EFF_STR_DT,
AC.EFF_END_DT AC_EFF_END_DT,
(select min(CORP_ACCT_ID)
from D236OT00.GOLD_CUST_CSR_ACC GA
where (AC.WBS_CD_LEVEL_01 = GA.CORP_ACCT_ID)) CORP_ACCT_ID,
ASEG.SEGMENT_TYPE,
ASEG.SEGMENT_CODE,
AC.WBS_CD_LEVEL_01,
AC.WBS_CD_LEVEL_02,
AC.WBS_CD_LEVEL_03,
AC.WBS_CD_LEVEL_04,
AC.WBS_CD_LEVEL_05,
AC.WBS_CD_LEVEL_06,
AC.WBS_CD_LEVEL_07,
AC.WBS_CD_LEVEL_08,
AC.WBS_CD_LEVEL_09,
AC.WBS_CD_LEVEL_10
from D236OT00.ACC1_ACCOUNT_NB AC LEFT OUTER JOIN D236OT00.ASEG_ACCT_SEG_NB ASEG
ON(AC.ACCT_ID = ASEG.ACCT_ID and ASEG.RECORD_EFF_END_DT = '9999-12-31'
and ASEG.RECORD_EFF_END_TM = '23.59.59'
and CURRENT DATE between ASEG.EFF_STR_DT and ASEG.EFF_END_DT)
where AC.ACCT_ID = ? and AC.RECORD_EFF_END_DT = '9999-12-31' and
AC.EFF_END_DT > CURRENT DATE and AC.INTR_CMPNY_CD in ('PO', 'BO') and
AC.ACCT_STAT_CD not in ('O', 'V', 'S')
how can i optimize this query for better performance?Try this version
select AC.ACCT_ID,
AC.EFF_STR_DT AC_EFF_STR_DT,
AC.EFF_END_DT AC_EFF_END_DT,
crop_acct.exp,
ASEG.SEGMENT_TYPE,
ASEG.SEGMENT_CODE,
AC.WBS_CD_LEVEL_01,
AC.WBS_CD_LEVEL_02,
AC.WBS_CD_LEVEL_03,
AC.WBS_CD_LEVEL_04,
AC.WBS_CD_LEVEL_05,
AC.WBS_CD_LEVEL_06,
AC.WBS_CD_LEVEL_07,
AC.WBS_CD_LEVEL_08,
AC.WBS_CD_LEVEL_09,
AC.WBS_CD_LEVEL_10
from D236OT00.ACC1_ACCOUNT_NB AC,
D236OT00.ASEG_ACCT_SEG_NB ASEG ,
(select min(CORP_ACCT_ID) exp
from D236OT00.GOLD_CUST_CSR_ACC GA
) CORP_ACCT,
where AC.ACCT_ID = ASEG.ACCT_ID
and ASEG.RECORD_EFF_END_DT = '9999-12-31'
and ASEG.RECORD_EFF_END_TM = '23.59.59'
and CURRENTDATE between ASEG.EFF_STR_DT and ASEG.EFF_END_DT
and AC.ACCT_ID = ?
and AC.RECORD_EFF_END_DT = '9999-12-31'
and AC.EFF_END_DT > CURRENTDATE
and AC.INTR_CMPNY_CD exists ('PO', 'BO')
and AC.ACCT_STAT_CD not exists ('O', 'V', 'S')
See if it works -
Can anyone tell me how can i optimize this query...
Can anyone tell me how can i optimize this query ??? :
Select Distinct eopersona.numident From rscompeten , rscompet , rscv , eopersona , rscurso , rseduca , rsexplab , rsinteres
Where ( ( (LOWER (rscompeten.nombre LIKE '%caracas%') AND ( rscompeten.id = rscompet.idcompeten ) AND ( rscv.id = rscompet.idcv ) AND ( eopersona.id = rscv.idpersona ) )
OR ( (LOWER (rscurso.nombre) LIKE '%caracas%') AND ( rscv.id = rscurso.idcv ) AND ( eopersona.id = rscv.idpersona ) )
OR ( (LOWER (rscurso.lugar) LIKE '%caracas%') AND ( rscv.id = rscurso.idcv ) AND ( eopersona.id = rscv.idpersona ) )
OR ( (LOWER (rseduca.univinst) LIKE '%caracas%)' AND ( rscv.id = rseduca.idcv ) AND ( eopersona.id = rscv.idpersona ) )
OR ( (LOWER (rsexplab.nombempre) LIKE '%caracas%' AND ( rscv.id = rsexplab.idcv ) AND ( eopersona.id = rscv.idpersona ) )
OR ( (LOWER (rsinteres.descrip) LIKE '%caracas%' AND ( rscv.id = rsinteres.idcv ) AND ( eopersona.id = rscv.idpersona ) )
OR ( (LOWER (rscv.cargoasp) LIKE '%caracas%' AND ( eopersona.id = rscv.idpersona ) )
OR ( LOWER (eopersona.ciudad) LIKE '%caracas%' AND ( eopersona.id = rscv.idpersona )
PLEASE IF YOU FIND SOMETHING WRONG.. PLEASE HELP ME.. this query takes me aproximatelly 10 minutes and the database is really small ( with only 200 records on each table )You are querying eight tables, however in any of your OR predicates you're only restricting 3 or 4 of those tables. That means that the remaining 4 or 5 tables are generating cartesian products. (n.b. the cartesian product of 5 tables with 200 rows each results in g 200^5 = 320,000,000,000 rows) Then you casually hide this behind "distinct".
A simple restatement of your requirements looks like this:
Select eopersona.numident
From rscompeten,
rscompet,
rscv,
eopersona
Where LOWER (rscompeten.nombre) LIKE '%caracas%'
AND rscompeten.id = rscompet.idcompeten
AND rscv.id = rscompet.idcv
AND eopersona.id = rscv.idpersona
UNION
Select eopersona.numident
From rscurso ,
rscv,
eopersona
Where LOWER (rscurso.nombre) LIKE '%caracas%'
AND rscv.id = rscurso.idcv
AND eopersona.id = rscv.idpersona
UNION
Select eopersona.numident
From rscurso ,
rscv,
eopersona
Where LOWER (rscurso.lugar) LIKE '%caracas%'
AND rscv.id = rscurso.idcv
AND eopersona.id = rscv.idpersona
UNION
...From there you can eliminate redundancies as desired, but I imagine that the above will perform admirably with the data volumes you describe. -
How does XDB optimize XML Query?
I found the query speed of XDB is much slower than Berkeley XML DB.
How does XDB optimize XML Query?
Are there any documents on this subject?
And can XDB create indices on XMLType ( e.g. the index on element/attribute value and/or structure index)? if yes, how to do that?lezhou had a valid question and asked about:
"I found the query speed of XDB is much slower than Berkeley XML DB"
"How does XDB optimize XML Query?"
These point to a "XML DB Concepts Guide", which does not yet exist.
The procedures are explained, the methods are explained. If you enable event tracing as described in the XMLDB Developers Guide 10gR2, you will see statements in your trace file which will tell you more about the XML DB architecture (and therefor you can deduct performance impact) then the manual will reveal.
An other example:
The xdbconfig.xsd file is neatly explained - in regards of http-port-etc
But not what the implecations are if you alter one of the other ones (the not explained parameters).
If you know the architecture (GROUND LEVEL), you can give an correct answer to the initial question "I found the query speed of XDB is much slower than Berkeley XML DB. How does XDB optimize XML Query?"
The balanced tree index is constructed the same way (on the same theory) in Oracle, DB2, but apparantly X is faster because in with the same buildup/architecture/databasestructure for both products, with the same data, with the same X --> value Y is beter constructed and delivers a better performance.
apples = apples
oracle xmldb = berkeley xmldb --> how can i test the o.apples=b.apples and that under these circumstances o.apples are faster ;-)
THEREFOR:
"I have to disagree a little bit...("It speaks about all these in detail").
Still waiting for the XMLDB Concepts Guide / Administrators Guide / Performance Guide. -
Optimization select query...
Hi..
The below select query is causing performance issue in production , it is taking much time.
Please suggest how to optimize it .
SELECT belnr bukrs gjahr awkey blart FROM bkpf
INTO TABLE t_bkpf
WHERE bukrs IN s_bukrs AND
gjahr IN r_year.
Regards
chetan
Moderator message - Please see Please Read before Posting in the Performance and Tuning Forum before posting - post locked
Edited by: Rob Burbank on Oct 13, 2009 10:49 AMHi Chetan,
I suggest the following to optimize your performance.
- Change the order of the fields (belnr bukrs gjahr awkey blart), so that they're in the same order than showned in SE11 table data definition (you may need to change the order in t_bkpf definiton also).
- Add the client in your select statement.
Something like this:
SELECT bukrs belnr gjahr blart awkey FROM bkpf CLIENT SPECIFIED
INTO TABLE t_bkpf
WHERE mandt = sy-mandt
AND bukrs IN s_bukrs
AND gjahr IN r_year.
Your statement it's very simple. I don't think that there is much more to do.
Hope that helps.
Kind regards.
Edited by: Bruno Garcia on Oct 10, 2009 10:48 AM -
Hi All,
Please help me to optimize my below SQL query :
delete from BATCH_REQUEST_RESPONSE where (SOState='ResponseReceived' or SOState='Header’ or SOState='InvalidSO’) and ACKREC='Y' and SourceAgentId=? and BATCH_REQUEST_RESPONSE.TransactionId NOT EXISTS (select transactionid from SORECORD)
Note: Result of (select transactionid from SORECORD ) could be till 100 K
Regards,
DheerajMaybe - I'm not sure what you're after
delete from batch_request_response brr
where sostate in ('ResponseReceived','Header','InvalidSO')
and ackrec = 'Y'
and sourceagentid = :agent_id
and not exists(select null
from sorecord
where transactionid = brr.transactionid
delete from batch_request_response brr
where sostate in ('ResponseReceived','Header','InvalidSO')
and ackrec = 'Y'
and sourceagentid = :agent_id
and 0 = (select count(*)
from sorecord
) /* if sorecord must be empty */
Regards
Etbin -
Hi,
I need to optimize or rewrite the following query, is there anyone who can help me?
SELECT *
FROM
SELECT a.CONTRACT_ID AS SERVICE_ORDER_HEAD_ID,
C.CONDITION_TYPE_ID,
b.VALUE_CONDITION_AMT AS AMOUNT,
b.BASE_CONDITION_AMT AS BASE_AMOUNT,
b.TOTAL_AMT AS TOT_AMOUNT
FROM QTST_CONTRACT_PRICE_COND A,
COPE_ORDER_CONDITION B,
COSM_ORDER_CONDITION_DE_L C,
COSM_CONDITION_CLASS_L D,
COSM_CONDITION_METHOD_L E,
--- PARTE MODIFICATA
MT_SETUP_PARAMETERS M,
SRST_SERVICE_ORDER_ITEM S
WHERE A.PRICE_CONDITION_ID = B.PRICE_CONDITION_ID(+)
AND A.POSITION_ID = B.POSITION_ID(+)
AND A.LEVEL_ID = B.LEVEL_ID(+)
AND A.CONDITION_COUNTER_ID = B.CONDITION_COUNTER_ID(+)
AND B.APPL_FK = C.APPL_ID(+)
AND B.USAGE_FK = C.USAGE_ID(+)
AND B.CONDITION_TYPE_FK = C.CONDITION_TYPE_ID(+)
AND B.CONDITION_CLASS_FK = D.CONDITION_CLASS_ID(+)
AND B.CONDITION_METHOD_FK = E.CONDITION_METHOD_ID(+)
--- PARTE MODIFICATA
-- AND a.POSITION_ID IN ( SELECT SERVICE_ORDER_ITEM_ID FROM SRST_SERVICE_ORDER_ITEM )
AND a.POSITION_ID = S.SERVICE_ORDER_ITEM_ID
AND A.CONDITION_COUNTER_ID = (SELECT MAX(A_I.CONDITION_COUNTER_ID)
FROM QTST_CONTRACT_PRICE_COND A_I
WHERE a.CONTRACT_ID = a_i.CONTRACT_ID
AND a.PRICE_CONDITION_ID = a_i.PRICE_CONDITION_ID
AND a.POSITION_ID = a_i.POSITION_ID
AND a.LEVEL_ID = a_i.LEVEL_ID
--- PARTE MODIFICATA
AND B.CONDITION_TYPE_FK = M.parameter_value_id
AND m.object_name_id = 'SRSA_SERVICE_ORDER_CONDITION'
and m.field_id = 'CONDITION_TYPE_FK'
and m.x_delete = '0'
) pivot (MAX(AMOUNT) AS AMOUNT,
MAX(BASE_AMOUNT) AS BASE_AMOUNT,
MAX(TOT_AMOUNT) AS TOT_AMOUNT
FOR CONDITION_TYPE_ID IN ('ZIAC' ROLE, 'ZIAD' RECOVERY_COMP, 'ZIAE' ROLE_TOTAL, 'ZIAF' CANCEL_REQU,
'ZIAG' PAYMENTS, 'ZIAH' CANCEL_OBT, 'ZIAI' REC_BY_REMB, 'ZIAJ' CREDIT_NOTE,
'ZIAK' BILL_TO_CUST, 'ZIAL' CHARGED_TO_SUPPL, 'ZIAM' CHARGED_TO_CUST, 'ZIAN' RECHARGE_CUST,
'ZIAO' POSTAGE, 'ZIAV' FINE_TO_PAY, 'ZIAW' SUPPLIER_FEE, 'ZIAX' ROLE_TOT_TO_PAY,
'ZIAY' FINE_AMOUNT, 'ZIRA' ROAD_TAX, 'ZIRB' ROAD_TAX_PAID, 'ZIRC' TOTAL_TAX_DUE,
'ZIRD' SANCTION, 'ZIRE' NOTIFICATIONS, 'ZIRF' INTEREST, 'ZIRG' ROAD_TAX_TOT_PAY,
'ZIRH' ROAD_TAX_CONTR_PAY ) ) ;
Thanks
StefanoI attach the explain plan,
of the select Suggested by RaminHashimzadeh
you can optimize?
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 55 | 57090 | | 3380 (2)| 00:00:48 | | | | | |
| 1 | TEMP TABLE TRANSFORMATION | | | | | | | | | | | |
| 2 | LOAD AS SELECT | SYS_TEMP_0FD9D673E_F303A87C | | | | | | | | | | |
| 3 | VIEW | | 11 | 4741 | | 21 (5)| 00:00:01 | | | | | |
| 4 | UNION-ALL | | | | | | | | | | | |
|* 5 | VIEW | | 10 | 4440 | | 19 (6)| 00:00:01 | | | | | |
|* 6 | WINDOW SORT PUSHED RANK | | 10 | 570 | | 19 (6)| 00:00:01 | | | | | |
| 7 | MERGE JOIN CARTESIAN | | 10 | 570 | | 18 (0)| 00:00:01 | | | | | |
| 8 | INDEX FULL SCAN | MT_REPORTING_LOCALIZATION_PK | 1 | 2 | | 1 (0)| 00:00:01 | | | | | |
| 9 | BUFFER SORT | | 10 | 550 | | 18 (6)| 00:00:01 | | | | | |
| 10 | TABLE ACCESS FULL | COSM_CONDITION_CLASS | 10 | 550 | | 17 (0)| 00:00:01 | | | | | |
| 11 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | | | | |
| 12 | PX COORDINATOR | | | | | | | | | | | |
| 13 | PX SEND QC (RANDOM) | :TQ10003 | 55 | 9845 | | 38 (3)| 00:00:01 | | | Q1,03 | P->S | QC (RAND) |
| 14 | LOAD AS SELECT | SYS_TEMP_0FD9D673F_F303A87C | | | | | | | | Q1,03 | PCWP | |
| 15 | VIEW | | 55 | 9845 | | 38 (3)| 00:00:01 | | | Q1,03 | PCWP | |
| 16 | UNION-ALL | | | | | | | | | Q1,03 | PCWP | |
|* 17 | VIEW | | 54 | 10368 | | 36 (3)| 00:00:01 | | | Q1,03 | PCWP | |
|* 18 | WINDOW SORT PUSHED RANK | | 54 | 3240 | | 36 (3)| 00:00:01 | | | Q1,03 | PCWP | |
| 19 | PX RECEIVE | | 54 | 3240 | | 36 (3)| 00:00:01 | | | Q1,03 | PCWP | |
| 20 | PX SEND HASH | :TQ10002 | 54 | 3240 | | 36 (3)| 00:00:01 | | | Q1,02 | P->P | HASH |
|* 21 | WINDOW CHILD PUSHED RANK | | 54 | 3240 | | 36 (3)| 00:00:01 | | | Q1,02 | PCWP | |
| 22 | MERGE JOIN CARTESIAN | | 54 | 3240 | | 35 (0)| 00:00:01 | | | Q1,02 | PCWP | |
| 23 | BUFFER SORT | | | | | | | | | Q1,02 | PCWC | |
| 24 | PX RECEIVE | | 1 | 2 | | 1 (0)| 00:00:01 | | | Q1,02 | PCWP | |
| 25 | PX SEND BROADCAST | :TQ10000 | 1 | 2 | | 1 (0)| 00:00:01 | | | | S->P | BROADCAST |
| 26 | INDEX FULL SCAN | MT_REPORTING_LOCALIZATION_PK | 1 | 2 | | 1 (0)| 00:00:01 | | | | | |
| 27 | BUFFER SORT | | 54 | 3132 | | 35 (3)| 00:00:01 | | | Q1,02 | PCWP | |
| 28 | PX BLOCK ITERATOR | | 54 | 3132 | | 33 (0)| 00:00:01 | | | Q1,02 | PCWC | |
| 29 | TABLE ACCESS FULL | COSM_CONDITION_METHOD | 54 | 3132 | | 33 (0)| 00:00:01 | | | Q1,02 | PCWP | |
| 30 | BUFFER SORT | | | | | | | | | Q1,03 | PCWC | |
| 31 | PX RECEIVE | | 1 | | | 2 (0)| 00:00:01 | | | Q1,03 | PCWP | |
| 32 | PX SEND ROUND-ROBIN | :TQ10001 | 1 | | | 2 (0)| 00:00:01 | | | | S->P | RND-ROBIN |
| 33 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | | | | |
| 34 | PX COORDINATOR | | | | | | | | | | | |
| 35 | PX SEND QC (RANDOM) | :TQ20003 | 1480 | 835K| | 32 (4)| 00:00:01 | | | Q2,03 | P->S | QC (RAND) |
| 36 | LOAD AS SELECT | SYS_TEMP_0FD9D673D_F303A87C | | | | | | | | Q2,03 | PCWP | |
| 37 | VIEW | | 1480 | 835K| | 32 (4)| 00:00:01 | | | Q2,03 | PCWP | |
| 38 | UNION-ALL | | | | | | | | | Q2,03 | PCWP | |
|* 39 | VIEW | | 1479 | 853K| | 30 (4)| 00:00:01 | | | Q2,03 | PCWP | |
|* 40 | WINDOW SORT PUSHED RANK | | 1479 | 102K| | 30 (4)| 00:00:01 | | | Q2,03 | PCWP | |
| 41 | PX RECEIVE | | 1479 | 102K| | 30 (4)| 00:00:01 | | | Q2,03 | PCWP | |
| 42 | PX SEND HASH | :TQ20002 | 1479 | 102K| | 30 (4)| 00:00:01 | | | Q2,02 | P->P | HASH |
|* 43 | WINDOW CHILD PUSHED RANK | | 1479 | 102K| | 30 (4)| 00:00:01 | | | Q2,02 | PCWP | |
| 44 | MERGE JOIN CARTESIAN | | 1479 | 102K| | 29 (0)| 00:00:01 | | | Q2,02 | PCWP | |
| 45 | BUFFER SORT | | | | | | | | | Q2,02 | PCWC | |
| 46 | PX RECEIVE | | 1 | 2 | | 1 (0)| 00:00:01 | | | Q2,02 | PCWP | |
| 47 | PX SEND BROADCAST | :TQ20000 | 1 | 2 | | 1 (0)| 00:00:01 | | | | S->P | BROADCAST |
| 48 | INDEX FULL SCAN | MT_REPORTING_LOCALIZATION_PK | 1 | 2 | | 1 (0)| 00:00:01 | | | | | |
| 49 | BUFFER SORT | | 1479 | 99K| | 29 (4)| 00:00:01 | | | Q2,02 | PCWP | |
| 50 | PX BLOCK ITERATOR | | 1479 | 99K| | 26 (0)| 00:00:01 | | | Q2,02 | PCWC | |
| 51 | TABLE ACCESS FULL | COSM_ORDER_CONDITION_DE | 1479 | 99K| | 26 (0)| 00:00:01 | | | Q2,02 | PCWP | |
| 52 | BUFFER SORT | | | | | | | | | Q2,03 | PCWC | |
| 53 | PX RECEIVE | | 1 | | | 2 (0)| 00:00:01 | | | Q2,03 | PCWP | |
| 54 | PX SEND ROUND-ROBIN | :TQ20001 | 1 | | | 2 (0)| 00:00:01 | | | | S->P | RND-ROBIN |
| 55 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | | | | |
| 56 | PX COORDINATOR | | | | | | | | | | | |
| 57 | PX SEND QC (RANDOM) | :TQ30009 | 55 | 57090 | | 3380 (2)| 00:00:48 | | | Q3,09 | P->S | QC (RAND) |
| 58 | VIEW | | 55 | 57090 | | 3380 (2)| 00:00:48 | | | Q3,09 | PCWP | |
|* 59 | FILTER | | | | | | | | | Q3,09 | PCWC | |
| 60 | TRANSPOSE | | | | | | | | | Q3,09 | PCWC | |
| 61 | SORT GROUP BY | | 55 | 5115 | | 3380 (2)| 00:00:48 | | | Q3,09 | PCWP | |
| 62 | PX RECEIVE | | 55 | 5115 | | 3380 (2)| 00:00:48 | | | Q3,09 | PCWP | |
| 63 | PX SEND HASH | :TQ30008 | 55 | 5115 | | 3380 (2)| 00:00:48 | | | Q3,08 | P->P | HASH |
| 64 | SORT GROUP BY PIVOT | | 55 | 5115 | | 3380 (2)| 00:00:48 | | | Q3,08 | PCWP | |
|* 65 | VIEW | | 7757 | 704K| | 3379 (2)| 00:00:48 | | | Q3,08 | PCWP | |
|* 66 | WINDOW SORT PUSHED RANK | | 7757 | 2386K| 2560K| 3379 (2)| 00:00:48 | | | Q3,08 | PCWP | |
| 67 | PX RECEIVE | | 7757 | 2386K| | 3379 (2)| 00:00:48 | | | Q3,08 | PCWP | |
| 68 | PX SEND HASH | :TQ30007 | 7757 | 2386K| | 3379 (2)| 00:00:48 | | | Q3,07 | P->P | HASH |
|* 69 | WINDOW CHILD PUSHED RANK | | 7757 | 2386K| | 3379 (2)| 00:00:48 | | | Q3,07 | PCWP | |
|* 70 | HASH JOIN RIGHT OUTER | | 7757 | 2386K| | 3377 (2)| 00:00:48 | | | Q3,07 | PCWP | |
| 71 | PX RECEIVE | | 1480 | 28120 | | 43 (3)| 00:00:01 | | | Q3,07 | PCWP | |
| 72 | PX SEND BROADCAST | :TQ30005 | 1480 | 28120 | | 43 (3)| 00:00:01 | | | Q3,05 | P->P | BROADCAST |
| 73 | VIEW | COSM_ORDER_CONDITION_DE_L | 1480 | 28120 | | 43 (3)| 00:00:01 | | | Q3,05 | PCWP | |
| 74 | VIEW | | 1480 | 28120 | | 11 (0)| 00:00:01 | | | Q3,05 | PCWP | |
| 75 | PX BLOCK ITERATOR | | 1480 | 835K| | 11 (0)| 00:00:01 | | | Q3,05 | PCWC | |
| 76 | TABLE ACCESS FULL | SYS_TEMP_0FD9D673D_F303A87C | 1480 | 835K| | 11 (0)| 00:00:01 | | | Q3,05 | PCWP | |
|* 77 | HASH JOIN | | 4098 | 1184K| | 3334 (2)| 00:00:47 | | | Q3,07 | PCWP | |
| 78 | BUFFER SORT | | | | | | | | | Q3,07 | PCWC | |
| 79 | PX RECEIVE | | 22296 | 718K| | 47 (0)| 00:00:01 | | | Q3,07 | PCWP | |
| 80 | PX SEND HASH | :TQ30002 | 22296 | 718K| | 47 (0)| 00:00:01 | | | | S->P | HASH |
| 81 | PARTITION HASH ALL | | 22296 | 718K| | 47 (0)| 00:00:01 | 1 | 4 | | | |
| 82 | INDEX FAST FULL SCAN | SRST_SERVICE_ORDER_ITEM_PK | 22296 | 718K| | 47 (0)| 00:00:01 | 1 | 4 | | | |
| 83 | PX RECEIVE | | 4098 | 1052K| | 3286 (2)| 00:00:47 | | | Q3,07 | PCWP | |
| 84 | PX SEND HASH | :TQ30006 | 4098 | 1052K| | 3286 (2)| 00:00:47 | | | Q3,06 | P->P | HASH |
|* 85 | HASH JOIN | | 4098 | 1052K| | 3286 (2)| 00:00:47 | | | Q3,06 | PCWP | |
| 86 | PX RECEIVE | | 3992 | 612K| | 1757 (2)| 00:00:25 | | | Q3,06 | PCWP | |
| 87 | PX SEND BROADCAST | :TQ30004 | 3992 | 612K| | 1757 (2)| 00:00:25 | | | Q3,04 | P->P | BROADCAST |
|* 88 | HASH JOIN RIGHT OUTER | | 3992 | 612K| | 1757 (2)| 00:00:25 | | | Q3,04 | PCWP | |
| 89 | PX RECEIVE | | 55 | 330 | | 40 (3)| 00:00:01 | | | Q3,04 | PCWP | |
| 90 | PX SEND BROADCAST | :TQ30003 | 55 | 330 | | 40 (3)| 00:00:01 | | | Q3,03 | P->P | BROADCAST |
| 91 | VIEW | COSM_CONDITION_METHOD_L | 55 | 330 | | 40 (3)| 00:00:01 | | | Q3,03 | PCWP | |
| 92 | VIEW | | 55 | 330 | | 2 (0)| 00:00:01 | | | Q3,03 | PCWP | |
| 93 | PX BLOCK ITERATOR | | 55 | 9845 | | 2 (0)| 00:00:01 | | | Q3,03 | PCWC | |
| 94 | TABLE ACCESS FULL | SYS_TEMP_0FD9D673F_F303A87C | 55 | 9845 | | 2 (0)| 00:00:01 | | | Q3,03 | PCWP | |
|* 95 | HASH JOIN RIGHT OUTER | | 3992 | 588K| | 1717 (2)| 00:00:25 | | | Q3,04 | PCWP | |
| 96 | BUFFER SORT | | | | | | | | | Q3,04 | PCWC | |
| 97 | PX RECEIVE | | 11 | 33 | | 23 (5)| 00:00:01 | | | Q3,04 | PCWP | |
| 98 | PX SEND BROADCAST | :TQ30000 | 11 | 33 | | 23 (5)| 00:00:01 | | | | S->P | BROADCAST |
| 99 | VIEW | COSM_CONDITION_CLASS_L | 11 | 33 | | 23 (5)| 00:00:01 | | | | | |
| 100 | VIEW | | 11 | 33 | | 2 (0)| 00:00:01 | | | | | |
| 101 | TABLE ACCESS FULL| SYS_TEMP_0FD9D673E_F303A87C | 11 | 4741 | | 2 (0)| 00:00:01 | | | | | |
|*102 | HASH JOIN | | 3992 | 576K| | 1693 (2)| 00:00:24 | | | Q3,04 | PCWP | |
| 103 | BUFFER SORT | | | | | | | | | Q3,04 | PCWC | |
| 104 | PX RECEIVE | | 1 | 49 | | 1 (0)| 00:00:01 | | | Q3,04 | PCWP | |
| 105 | PX SEND BROADCAST | :TQ30001 | 1 | 49 | | 1 (0)| 00:00:01 | | | | S->P | BROADCAST |
|*106 | INDEX RANGE SCAN | MT_SETUP_PARAMETERS_PK | 1 | 49 | | 1 (0)| 00:00:01 | | | | | |
| 107 | PX BLOCK ITERATOR | | 1560K| 147M| | 1688 (2)| 00:00:24 | 1 | 4 | Q3,04 | PCWC | |
|*108 | TABLE ACCESS FULL | COPE_ORDER_CONDITION | 1560K| 147M| | 1688 (2)| 00:00:24 | 1 |1048575| Q3,04 | PCWP | |
| 109 | PX BLOCK ITERATOR | | 1560K| 157M| | 1525 (1)| 00:00:22 | 1 | 4 | Q3,06 | PCWC | |
| 110 | TABLE ACCESS FULL | QTST_CONTRACT_PRICE_COND | 1560K| 157M| | 1525 (1)| 00:00:22 | 1 | 4 | Q3,06 | PCWP | | -
Hi,
I have a query that will select the same tables and using Subquery. The query is taking too much time as the table has more records. Can anyone help to modify the query which can take minimum time. Thanks in Advance.
Below is the query
SELECT
SIK_ROLLE_ID,SIK_OBJEKT_ID,SIK_AFTALE_ID,SIK_AFTALE_TP,ROLLE_TP,KNID,EJENDOMS_ID,EJENDOMS_TP, VURD_BLB
,VURD_VAKD,VURD_DT,HAIRCUT,SIK_VAKD,SIK_FOER_BLB,HAIRCUT_BLB,FORANST_PRIO_BLB,RETTIGHEDER_BLB,SIK_EFTER_BLB
,OVERSKREVET_MK,OVERSKREVET_BLB,MAN_HAIRCUT_BLB,MAN_OBJ_E_HCUT_BLB,GLDER_FRA_DT, TRANSAKTIONS_TP,SIK_STATUS_TP
FROM
ETZ3EDW.dbo.EWWH_KS_OBJ_KND2_HV A
WHERE
A.SIK_AFTALE_TP = 20130 and A.TRANSAKTIONS_TP not in ('S')
AND A.GLDER_FRA_DT = ( SELECT MAX(B.GLDER_FRA_DT)
FROM ETZ3EDW.DBO.EWWH_KS_OBJ_KND2_HV B
WHERE B.GLDER_FRA_DT <= '2014-01-08'
AND A.SIK_OBJEKT_ID = B.SIK_OBJEKT_ID
AND A.SIK_AFTALE_ID = B.SIK_AFTALE_ID)Can you show us a execution plan of the query?
CREATE TABLE #tmp (col DATE)
INSERT INTO #tmp
SELECT MAX(B.GLDER_FRA_DT)
FROM ETZ3EDW.DBO.EWWH_KS_OBJ_KND2_HV BJOIN ETZ3EDW.dbo.EWWH_KS_OBJ_KND2_HV AON A.SIK_OBJEKT_ID = B.SIK_OBJEKT_ID
AND A.SIK_AFTALE_ID = B.SIK_AFTALE_ID
WHERE B.GLDER_FRA_DT <= '2014-01-08'SELECT
SIK_ROLLE_ID,SIK_OBJEKT_ID,SIK_AFTALE_ID,SIK_AFTALE_TP,ROLLE_TP,KNID,EJENDOMS_ID,EJENDOMS_TP, VURD_BLB
,VURD_VAKD,VURD_DT,HAIRCUT,SIK_VAKD,SIK_FOER_BLB,HAIRCUT_BLB,FORANST_PRIO_BLB,RETTIGHEDER_BLB,SIK_EFTER_BLB
,OVERSKREVET_MK,OVERSKREVET_BLB,MAN_HAIRCUT_BLB,MAN_OBJ_E_HCUT_BLB,GLDER_FRA_DT, TRANSAKTIONS_TP,SIK_STATUS_TP
FROM
ETZ3EDW.dbo.EWWH_KS_OBJ_KND2_HV A
WHERE
A.SIK_AFTALE_TP = 20130 and A.TRANSAKTIONS_TP not in ('S')
AND A.GLDER_FRA_DT IN (SELECT col FROM #tmp)
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence -
Hi !!!
Please anybody can help me ?
I have this Stand Alone Procedure:
==========>
declare cursor c1 is
select
A.UNIT,
A.CODE,
A.PREFIX,
A.PART,
A.TYPE_CODE,
B.VALUE
FROM
TABLEA A,
TABLEB B
WHERE
A.UNIT||A.CODE||A.PREFIX||A.PART||A.TYPE_CODE =
B.UNIT||B.CODE||B.PREFIX||B.PART||B.TYPE_CODE
AND A.VALUE != B.VALUE;
VARUNIT TABLEA.UNIT%TYPE;
VARPREFIX TABLEA.PREFIX%TYPE;
VARPART TABLEA.PART%TYPE;
VARTYPE_CODE TABLEA.TYPE_COD%TYPE;
VARVALUE TABLEB.VALUE%TYPE;
BEGIN
OPEN C1;
LOOP;
FETCH C1 INTO VARUNIT,VARPREFIX,VARPART,VARTYPE_CODE,VARVALUE;
EXIT WHEN C1%NOTFOUND;
UPDATE TABLEA
SET VALUE = VARVALUE
WHERE
TABLEA.UNIT||TABLEA.CODE||TABLEA.PREFIX||TABLEA.PART||TABLEA.TYPE_CODE =
VARUNIT||VARCODE||VARPREFIX||VARPART||VARTYPE_CODE;
COMMIT;
END LOOP;
END;
<===============
In tableA i have - 170.000 records and in tableB i have - 30.000.
I need to optimize this procedure, anybody has any idea How i can optimize it ?
Thanks in advanced.
Gerson Belini.Sure,
1) Either make a indexed function
CREATE INDEX TABLEA_N01 ON TABLEA ( Unit || Code || Prefix || Part || Type_Code );
or
2) Make a regular index, and change your query to the below
CREATE INDEX TABLEA_N01 ON TABLEA ( Unit, Code, Prefix, Part, Type_Code );
Even creating an index on some of the fields would most likely help
SELECT A.Unit
, A.Code
, A.Prefix
, A.Part
, A.Type_Code
, B.Value
FROM
TABLEA A
, TABLEB B
WHERE A.Unit = B.Unit
AND A.Code = B.Code
AND A.Prefix = B.Prefix
AND A.Part = B.Part
AND A.Type_Code = B.Type_Code
AND A.Value != B.Value;Good Luck,
Eric Kamradt -
How should I optimize this query
Hi
I have following query
SELECT /*+ USE_HASH (bp,rp) */ TO_CHAR (part_name)
FROM base_part bp,risk_assessment_part rp
WHERE bp.part_number = rp.part_number and risk_activity_code = 1
Explain Plan for this is
SELECT STATEMENT Optimizer Mode=CHOOSE
NESTED LOOPS
TABLE ACCESS FULL GQTS6USER.BASE_PART ROWS 4M , BYTES 331M, COST 7731
INDEX UNIQUE SCAN GQTS6USER.XPK_RISK_ASSESSMENT_PART ROWS 1, BYTES 22
Is there any way to optimize qry execution time???Make sure you have indexes on the columns used in join and filter conditions. Gather current statistics. Remove the TO_CHAR. Test the query with and without the hint and compare times and execution plans. Bear in mind the optimizer may choose to ignore a hint if it determines that there is a better plan.
-
How can I optimize this select query? Basically, how can I factor out the common codes in the query below
(i.e. r.batch_id is null AND r.rpt_type='Child' is a common criteria for the two filter conditions)
SQL:
SELECT DISTINCT rpt_id, rpt_name, emp_id
FROM REPORT r
WHERE r.batch_id is null
AND r.rpt_type='Child'
--filter by BU only
AND (r.BU IN (SELECT BU FROM BUnit WHERE Active='Y'))
--filter by BU/OU combination
OR r.batch_id is null
AND r.rpt_type='Child'
AND (r.BU || ' ' || R.OU IN (SELECT BU || ' ' || OU FROM BUnit WHERE Active='Y'))
Thank you.
Edited by: 874976 on Jul 25, 2011 5:53 PM874976 wrote:
How can I optimize this select query? Basically, how can I factor out the common codes in the query below
(i.e. r.batch_id is null AND r.rpt_type='Child' is a common criteria for the two filter conditions)
SQL:
SELECT DISTINCT rpt_id, rpt_name, emp_id
FROM REPORT r
WHERE r.batch_id is null
AND r.rpt_type='Child'
--filter by BU only
AND (r.BU IN (SELECT BU FROM BUnit WHERE Active='Y'))
--filter by BU/OU combination
OR r.batch_id is null
AND r.rpt_type='Child'
AND (r.BU || ' ' || R.OU IN (SELECT BU || ' ' || OU FROM BUnit WHERE Active='Y'))
Thank you.
Edited by: 874976 on Jul 25, 2011 5:53 PM
How can I optimize this select query? query is already optimized.
If you disagree, then prove me wrong.
Maybe you are looking for
-
Stuck at apple logo, Help?
Hi, I had 3 user accounts, 1 which was hardly used. Well I was using the hardly used account a couple of weekends ago surfing the web and it suddenly froze & got the spinning beach ball. I tried to restart and it got stuck at the loading apple gray s
-
How to organize/configure email accounts on iMac
I'm a brand new Mac user, and I really would appreciate some opinions on how to efficiently organize/configure my email accounts. -previously on Windows XP at home and work, I had an 'office email' address and and a family email address at home that
-
Hello ! I just want to share something familiar with that black display or screen occurs for some people. When I watch youtube videos, I used to watch them in html5 720p videos (not flash videos, https://www.youtube.com/html5 ). I upgraded firefox to
-
Animation Render Settings crash After Effects
Hello all, We have a strange issue on one of our Mac Pros running After Effects (CS5). Whenever it renders with the Animation render settings, it beach balls and eventually freezes, unless you log out of the user and log back in (in rare occasions, i
-
Why am I getting these lines?
Hello everyone. I have asked this before here and was helped out very well. I have followed the same steps I was told before which worked before but for some reason is not working now. Here is a clip of a Demo I made for a client but I keep getting t