Home » RDBMS Server » Performance Tuning » Optimisation of query sql (ORacle 9i)
Optimisation of query sql [message #630353] |
Thu, 25 December 2014 04:00 |
|
achraf_ef
Messages: 16 Registered: December 2014 Location: Morocco
|
Junior Member |
|
|
Hello guys,
I'm trying to optimize the below request, can you please give some advices :
SELECT /* Array Size 500 - Exec 1*/
1 FROM v_vignette_consomme_carb
where TYPECOUP = 'G'
And CODTYPAC = '4'
And ANNEVIGN = '2013'
And ALFADEBU = 'AK'
and ((numevign BETWEEN 'C13GAK980001'
AND 'C13GAK980100')
OR (numevigf BETWEEN 'C13GAK980001'
AND 'C13GAK980100')
OR ( numevign <= 'C13GAK980001'
AND numevigf >= 'C13GAK980001')
OR ( numevign <= 'C13GAK980100'
AND numevigf >= 'C13GAK980100')
)
v_vignette_consomme_carb is a view which relates 4 tables by union all.
thanks and regards
|
|
|
|
|
|
|
|
|
Re: Optimisation of query sql [message #630368 is a reply to message #630367] |
Thu, 25 December 2014 07:37 |
|
achraf_ef
Messages: 16 Registered: December 2014 Location: Morocco
|
Junior Member |
|
|
Here is the execution plan of the request with using hint :
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 13 | 637 | 1062 (3)| | |
| 1 | VIEW | V_VIGNETTE_CONSOMME_CARB | 13 | 637 | | | |
| 2 | UNION-ALL | | | | | | |
| 3 | CONCATENATION | | | | | | |
|* 4 | TABLE ACCESS BY LOCAL INDEX ROWID| VIGNETTE_CARBURANT | 1 | 34 | 4 (25)| 4 | 4 |
|* 5 | INDEX RANGE SCAN | I_V_CARB_NUMEVIGF | 1 | | 4 (25)| 4 | 4 |
|* 6 | INDEX RANGE SCAN | I_V_CARB_1PAR | 1 | 34 | 4 (25)| 4 | 4 |
|* 7 | INDEX RANGE SCAN | I_V_CARB_1PAR | 1 | 34 | 4 (25)| 4 | 4 |
|* 8 | INDEX RANGE SCAN | I_V_CARB_1PAR | 1 | 34 | 4 (25)| 4 | 4 |
|* 9 | TABLE ACCESS BY INDEX ROWID | ECHANGE_VIGNETTE | 7 | 224 | 1003 (2)| | |
|* 10 | INDEX RANGE SCAN | I_ANNVIGN_ECHVIGN | 46330 | | 105 (5)| | |
|* 11 | TABLE ACCESS BY INDEX ROWID | CARBUCARTE_VIGNETTE_REG_DOT | 1 | 32 | 19 (6)| | |
|* 12 | INDEX RANGE SCAN | I1_CARBUCARTE_VIGNETTE_REG_DOT | 432 | | 2 (50)| | |
|* 13 | TABLE ACCESS BY INDEX ROWID | CARBUCARTE_REG_VIGN_FACT | 1 | 32 | 23 (5)| | |
|* 14 | INDEX RANGE SCAN | I1_CARBUCARTE_REG_VIGN_FACT | 544 | | 3 (34)| | |
-----------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))) AND
"VIGNETTE_CARBURANT"."ANNEVIGN"=2013)
5 - access("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001' AND "VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100')
6 - access("VIGNETTE_CARBURANT"."ANNEVIGN"=2013 AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!)))
AND "VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND
"VIGNETTE_CARBURANT"."NUMEVIGN">='C13GAK980001' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100')
filter("VIGNETTE_CARBURANT"."VIGNVALI"=0 AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')))
7 - access("VIGNETTE_CARBURANT"."ANNEVIGN"=2013 AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!)))
AND "VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND
"VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980100' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100')
filter("VIGNETTE_CARBURANT"."VIGNVALI"=0 AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN">='C13GAK980001')) AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')) AND "VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980100')
8 - access("VIGNETTE_CARBURANT"."ANNEVIGN"=2013 AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!)))
AND "VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND
"VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980001')
filter("VIGNETTE_CARBURANT"."VIGNVALI"=0 AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980100')) AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN">='C13GAK980001')) AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')) AND "VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')
9 - filter("ECHANGE_VIGNETTE"."TYPECOUP"='G' AND "ECHANGE_VIGNETTE"."ALFADEBU"='AK' AND
"ECHANGE_VIGNETTE"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))) AND ("ECHANGE_VIGNETTE"."NUMEVIGN"<='C13GAK980001' AND
"ECHANGE_VIGNETTE"."NUMEVIGF">='C13GAK980001' OR "ECHANGE_VIGNETTE"."NUMEVIGN"<='C13GAK980100' AND
"ECHANGE_VIGNETTE"."NUMEVIGF">='C13GAK980100' OR "ECHANGE_VIGNETTE"."NUMEVIGF"<='C13GAK980100' AND
"ECHANGE_VIGNETTE"."NUMEVIGF">='C13GAK980001' OR "ECHANGE_VIGNETTE"."NUMEVIGN"<='C13GAK980100' AND
"ECHANGE_VIGNETTE"."NUMEVIGN">='C13GAK980001'))
10 - access("ECHANGE_VIGNETTE"."ANNEVIGN"=2013)
11 - filter("CARBUCARTE_VIGNETTE_REG_DOT"."TYPECOUP"='G' AND ("CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF">='C13GAK980001' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN"<='C13GAK980001' OR "CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF">='C13GAK980100' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN"<='C13GAK980100' OR "CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN">='C13GAK980001' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN"<='C13GAK980100' OR "CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF">='C13GAK980001' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF"<='C13GAK980100') AND "CARBUCARTE_VIGNETTE_REG_DOT"."ALFADEBU"='AK' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))))
12 - access("CARBUCARTE_VIGNETTE_REG_DOT"."ANNEVIGN"=2013)
13 - filter("CARBUCARTE_REG_VIGN_FACT"."TYPECOUP"='G' AND ("CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN"<='C13GAK980100' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN">='C13GAK980001' OR "CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF"<='C13GAK980100' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF">='C13GAK980001' OR "CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN"<='C13GAK980001' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF">='C13GAK980001' OR "CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN"<='C13GAK980100' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF">='C13GAK980100') AND "CARBUCARTE_REG_VIGN_FACT"."ALFADEBU"='AK' AND
"CARBUCARTE_REG_VIGN_FACT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))))
14 - access("CARBUCARTE_REG_VIGN_FACT"."ANNEVIGN"=2013)
Without using hint :
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 13 | 637 | 1062 (3)| | |
| 1 | VIEW | V_VIGNETTE_CONSOMME_CARB | 13 | 637 | | | |
| 2 | UNION-ALL | | | | | | |
| 3 | CONCATENATION | | | | | | |
|* 4 | TABLE ACCESS BY LOCAL INDEX ROWID| VIGNETTE_CARBURANT | 1 | 34 | 4 (25)| 4 | 4 |
|* 5 | INDEX RANGE SCAN | I_V_CARB_NUMEVIGF | 1 | | 4 (25)| 4 | 4 |
|* 6 | INDEX RANGE SCAN | I_V_CARB_1PAR | 1 | 34 | 4 (25)| 4 | 4 |
|* 7 | INDEX RANGE SCAN | I_V_CARB_1PAR | 1 | 34 | 4 (25)| 4 | 4 |
|* 8 | INDEX RANGE SCAN | I_V_CARB_1PAR | 1 | 34 | 4 (25)| 4 | 4 |
|* 9 | TABLE ACCESS BY INDEX ROWID | ECHANGE_VIGNETTE | 7 | 224 | 1003 (2)| | |
|* 10 | INDEX RANGE SCAN | I_ANNVIGN_ECHVIGN | 46330 | | 105 (5)| | |
|* 11 | TABLE ACCESS BY INDEX ROWID | CARBUCARTE_VIGNETTE_REG_DOT | 1 | 32 | 19 (6)| | |
|* 12 | INDEX RANGE SCAN | I1_CARBUCARTE_VIGNETTE_REG_DOT | 432 | | 2 (50)| | |
|* 13 | TABLE ACCESS BY INDEX ROWID | CARBUCARTE_REG_VIGN_FACT | 1 | 32 | 23 (5)| | |
|* 14 | INDEX RANGE SCAN | I1_CARBUCARTE_REG_VIGN_FACT | 544 | | 3 (34)| | |
-----------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))) AND
"VIGNETTE_CARBURANT"."ANNEVIGN"=2013)
5 - access("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001' AND "VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100')
6 - access("VIGNETTE_CARBURANT"."ANNEVIGN"=2013 AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!)))
AND "VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND
"VIGNETTE_CARBURANT"."NUMEVIGN">='C13GAK980001' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100')
filter("VIGNETTE_CARBURANT"."VIGNVALI"=0 AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')))
7 - access("VIGNETTE_CARBURANT"."ANNEVIGN"=2013 AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!)))
AND "VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND
"VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980100' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100')
filter("VIGNETTE_CARBURANT"."VIGNVALI"=0 AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN">='C13GAK980001')) AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')) AND "VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980100')
8 - access("VIGNETTE_CARBURANT"."ANNEVIGN"=2013 AND "VIGNETTE_CARBURANT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!)))
AND "VIGNETTE_CARBURANT"."TYPECOUP"='G' AND "VIGNETTE_CARBURANT"."ALFADEBU"='AK' AND
"VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001' AND "VIGNETTE_CARBURANT"."VIGNVALI"=0 AND
"VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980001')
filter("VIGNETTE_CARBURANT"."VIGNVALI"=0 AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980100')) AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGN">='C13GAK980001')) AND (LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF"<='C13GAK980100') OR
LNNVL("VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')) AND "VIGNETTE_CARBURANT"."NUMEVIGF">='C13GAK980001')
9 - filter("ECHANGE_VIGNETTE"."TYPECOUP"='G' AND "ECHANGE_VIGNETTE"."ALFADEBU"='AK' AND
"ECHANGE_VIGNETTE"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))) AND ("ECHANGE_VIGNETTE"."NUMEVIGN"<='C13GAK980001' AND
"ECHANGE_VIGNETTE"."NUMEVIGF">='C13GAK980001' OR "ECHANGE_VIGNETTE"."NUMEVIGN"<='C13GAK980100' AND
"ECHANGE_VIGNETTE"."NUMEVIGF">='C13GAK980100' OR "ECHANGE_VIGNETTE"."NUMEVIGF"<='C13GAK980100' AND
"ECHANGE_VIGNETTE"."NUMEVIGF">='C13GAK980001' OR "ECHANGE_VIGNETTE"."NUMEVIGN"<='C13GAK980100' AND
"ECHANGE_VIGNETTE"."NUMEVIGN">='C13GAK980001'))
10 - access("ECHANGE_VIGNETTE"."ANNEVIGN"=2013)
11 - filter("CARBUCARTE_VIGNETTE_REG_DOT"."TYPECOUP"='G' AND ("CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF">='C13GAK980001' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN"<='C13GAK980001' OR "CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF">='C13GAK980100' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN"<='C13GAK980100' OR "CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN">='C13GAK980001' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGN"<='C13GAK980100' OR "CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF">='C13GAK980001' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."NUMEVIGF"<='C13GAK980100') AND "CARBUCARTE_VIGNETTE_REG_DOT"."ALFADEBU"='AK' AND
"CARBUCARTE_VIGNETTE_REG_DOT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))))
12 - access("CARBUCARTE_VIGNETTE_REG_DOT"."ANNEVIGN"=2013)
13 - filter("CARBUCARTE_REG_VIGN_FACT"."TYPECOUP"='G' AND ("CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN"<='C13GAK980100' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN">='C13GAK980001' OR "CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF"<='C13GAK980100' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF">='C13GAK980001' OR "CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN"<='C13GAK980001' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF">='C13GAK980001' OR "CARBUCARTE_REG_VIGN_FACT"."NUMEVIGN"<='C13GAK980100' AND
"CARBUCARTE_REG_VIGN_FACT"."NUMEVIGF">='C13GAK980100') AND "CARBUCARTE_REG_VIGN_FACT"."ALFADEBU"='AK' AND
"CARBUCARTE_REG_VIGN_FACT"."CODTYPAC"=TO_NUMBER(NVL('4',TO_CHAR(UID@!))))
14 - access("CARBUCARTE_REG_VIGN_FACT"."ANNEVIGN"=2013)
*BlackSwan added {code} tags. Please do so yourself in the future. http://www.orafaq.com/forum/t/174502/
[Updated on: Thu, 25 December 2014 07:40] by Moderator Report message to a moderator
|
|
|
Re: Optimisation of query sql [message #630369 is a reply to message #630368] |
Thu, 25 December 2014 07:42 |
|
BlackSwan
Messages: 26766 Registered: January 2009 Location: SoCal
|
Senior Member |
|
|
Appear to be the same, but if you really used what was previously posted "/* Array Size 500 - Exec 1*/ " is just a comment & not a valid HINT
post the details that Michael directed; otherwise You're On Your Own (YOYO)!
based upon EXPLAIN PLAN details I would expect query to complete in under 1 second to return the 13 rows.
You have posted no specific evidence about why you believe that any problem actually exists.
[Updated on: Thu, 25 December 2014 07:46] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
|
Re: Optimisation of query sql [message #630405 is a reply to message #630378] |
Fri, 26 December 2014 07:59 |
|
Kevin Meade
Messages: 2103 Registered: December 1999 Location: Connecticut USA
|
Senior Member |
|
|
If what you want is a better understanding of SQL Tuning then try these.
This is a link to the scripts from my new book - "Oracle SQL Performance Tuning and Optimization: Its all about the Cardinalities". These scripts are free for you to use and share. They will help you diagnose performance problems with SQL.
Also, I have attached the first chapter of the book here as well. This too is free and you can share it with anyone. This is the promotional chapter for the book and it is the full chapter #1 so it will teach you about the role of Cardinality in SQL Tuning and provide you with additional tools that aid you in tuning SQL you need to tune. You do NOT need to buy the book in order to use these free scripts and share the free chapter and scripts with others.
Since your query is a view, it would be nice to see the view text.
If you want a full analysis then also post the table descriptions and their indexes (there is a script for the indexes in the script package).
Also, after you read the promotional chapter, please do the work of producing the FRP spreadsheet and then post that here as well.
With this information we will be able to provide more insight to help you. It might even be that you will figure out what is wrong yourself in which case if you do, please post your solution so others can see it and learn from it.
The possible obvious problems with this query are:
1. the concatenation might be bad and you need a concatenated index instead.
2. stats may be bad and your estimates are subsequently off causing you to use an index where you should be using a full table scan.
3. there may be nothing wrong. You have not provided any runtimes or any description of a desired runtime so there is no way to know if the query is actually underperforming.
#3 above is actually the first thing noted in the chapter provided above. You are supposed to have an idea of how long you need the query to go or at least have some clear indication that the query is not meeting an SLA, before you spend any time to tune the query. If a query is "FAST ENOUGH" then there is no need to tune it. "AS FAST AS POSSIBLE" is not a valid tuning goal.
Kevin
add the scripts file.
[Updated on: Sat, 03 January 2015 09:30] Report message to a moderator
|
|
|
|
|
Re: Optimisation of query sql [message #630409 is a reply to message #630407] |
Fri, 26 December 2014 08:52 |
|
achraf_ef
Messages: 16 Registered: December 2014 Location: Morocco
|
Junior Member |
|
|
Hello,
Here is the view text:
CREATE OR REPLACE FORCE VIEW "V_VIGNETTE_CONSOMME" ("NUMEVIGN", "NUMEVIGF", "CODEROWI", "CODETABL", "CODEVIGN", "CODVIGFI", "TYPECOUP", "CODTYPAC", "ANNEVIGN", "MONTVIGN", "ALFADEBU", "ALFA_FIN", "SERIDEBU", "SERI_FIN", "VIGNVALI") AS
SELECT numevign,
numevigf,
ROWID coderowi,
'VR' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM VIGNETTE_REPARATION
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT
numevign,
numevigf,
ROWID coderowi,
'VC' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM VIGNETTE_CARBURANT
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VT' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM VIGNETTE_BON_TRANSPORT
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'FC' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM VIGNETTE_REGL_FACT_CARN_BON
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VAT' CODETABL,
CODVIGDE CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM VIGNETTE_BON_ABON_AUTOR
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VTICK' CODETABL,
CODVIGDE CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM REG_VIGN_FACT_TICKET
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VA' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM VIGNETTE_REGL_FACT_AUTRE_CARN
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VE' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTECHA MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
0 vignvali
FROM ECHANGE_VIGNETTE
WHERE ANNEVIGN >= 2011
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VDOT' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
0 vignvali
FROM CARBUCARTE_VIGNETTE_REG_DOT
WHERE ANNEVIGN >= 2011
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VFACTCARBCART' CODETABL,
CODVIGDE CODEVIGN,
CODVIGFI CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
0 vignvali
FROM CARBUCARTE_REG_VIGN_FACT
WHERE ANNEVIGN >= 2011
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VI' CODETABL,
CODVIGDE CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM REG_VIGN_FACT_CARTES
WHERE NVL (VIGNVALI, 0) = 0
UNION ALL
SELECT numevign,
numevigf,
ROWID coderowi,
'VR' CODETABL,
CODEVIGN,
CODVIGFI,
TYPECOUP,
CODTYPAC,
ANNEVIGN,
MONTVIGN,
ALFADEBU,
ALFA_FIN,
SERIDEBU,
SERI_FIN,
vignvali
FROM VIGNETTE_VISITET
WHERE NVL (VIGNVALI, 0) = 0;
|
|
|
|
|
Re: Optimisation of query sql [message #630414 is a reply to message #630406] |
Fri, 26 December 2014 12:21 |
|
EdStevens
Messages: 1376 Registered: September 2013
|
Senior Member |
|
|
achraf_ef wrote on Fri, 26 December 2014 08:38
Currently the elapsed of this query(which is implemented in stored procedure and the literal values used are a bind variables i found in v$sqlarea :"SYS_B_38", :"SYS_B_01", :1 ....)
is about 1.5 s when there is no overlapping intervals(which is the normal case and consequently the most frequent).
So what is it when there ARE "overlapping intervals"?
How often does that occur?
How does that impact the business?
Quote:
I'm aiming to reduce the elapsed time less than 1s because this query is highly used by many users.
How much effort and time (which equals expense) is justified by saving half a second? Would the end user even notice? How much more work could the end user get done in a day if this query ran half a second faster?
[Updated on: Fri, 26 December 2014 12:40] Report message to a moderator
|
|
|
|
Re: Optimisation of query sql [message #630504 is a reply to message #630476] |
Mon, 29 December 2014 07:47 |
|
EdStevens
Messages: 1376 Registered: September 2013
|
Senior Member |
|
|
achraf_ef wrote on Mon, 29 December 2014 02:44 but what i'm trying the enhance is the normal case (no overlapping intervals), and i try to enhance performance of runtime of the query because it's used by many users at the same time .
Can you give me please some advices(how to avoid lock for example ....?)
Thanks.
This is the first time you've mentioned a lock. Are you actually getting locks or are you just assuming it is possible? Is your task to eliminate actual locks that are occurring, or is it to save that 1/2 second for the end user?
Up to this point, your description of this situation is only two cases. In the first case the user enters invalid data and gets an appropriate error message and you seem to indicate that we can ignore that case. The second case the query runs in 1.5 seconds and your goal is to get it under one second. So again, how much expense is it worth to the organization to save 1/2 second? What is the return on investment for that effort? Will the user even notice if/when you "succeed"? Will he be able to accumulate the saved time into a useful single block of time to allow him to complete other tasks that he is not able to complete today? Computing from the company's cost to employ the end user, how many 1/2 seconds would have to be reclaimed to pay their cost to employ you for the amount of time you've already spent on this? And even that calculation is assuming the reclaimed 1/2 could be turned into other useful work.
[Updated on: Mon, 29 December 2014 07:50] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
Re: Optimisation of query sql [message #630530 is a reply to message #630525] |
Mon, 29 December 2014 19:24 |
|
EdStevens
Messages: 1376 Registered: September 2013
|
Senior Member |
|
|
achraf_ef wrote on Mon, 29 December 2014 16:26Hello,
Should i try this action?
By the way i update the statistics for the schema(last update was performed in 10/2013) and the perfomance of the query was enhanced.
Regards
What does it cost to try it and see for yourself how it impacts?
That said, the preferred method of performance tuning is to identify the actual bottleneck then select a solution appropriate to that actual, measured, demonstrated bottleneck. IT sounds like you are just grasping at random techniques. What lead you to want to ask about cursor_sharing instead db-multiblock_read, or sga_target, or adding an index to your table, or upping the priority of the disks within the SAN architecture, or .... or ...... or ......
But I still question if you have an actual problem to solve. It sounds like you suffer from Compulsive Tuning Disorder. If you worked for me, I'd tell you in no uncertain terms to find something more productive to work on, as you have already cost me (your employer) more money in wasted time that will ever be recovered by tuning this query.
|
|
|
Goto Forum:
Current Time: Sun Feb 02 17:50:57 CST 2025
|