Hi All
I have the following query to be tuned..
Select distinct PA.PersonAddres s_IDX, AT.Name AddressType,
A.Line1 Address1, A.Line2 Address2, A.City, A.State,
A.County, A.Country, A.PostalCode, A.AllowPostalSo ftYN, PA.ChangedBy,
PA.ChangedDT, PA.DeletedYN ,PA.Person_Key, PA.Address_Key,
PA.AddressType_ Key
FROM PersonAddress_h PA,Address_h A,AddressType_h AT
where PA.AddressType_ Key IN (1,2,3) AND AT.AddressType_ IDX =
PA.AddressType_ Key
And A.Address_IDX = PA.Address_Key and PA.DeletedYN = 0
and PA.Person_KEY in (SELECT PERSON_KEY FROM INSURED_h I where
I.insured_idx=5 92374 )
and PA.CHANGEDDT=(s elect max(CHANGEDDT) from PersonAddress_h
where PA.PERSON_KEY=P erson_key and
AddressType_Key = PA.AddressType_ Key
and Address_Key=PA. Address_Key)
and AT.CHANGEDDT=(s elect max(CHANGEDDT) from AddressType_h
where AddressType_IDX = PA.AddressType_ Key)
and A.CHANGEDDT= (Select max(CHANGEDDT) from Address_h
where Address_IDX = PA.Address_Key and
(CHANGEDDT-to_date('10/22/2003 18:02:30','mm/dd/yyyy
hh24:mi:ss'))<= 0.001 )
with the plan as
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE
0 SORT (UNIQUE)
0 HASH JOIN
0 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF
'ADDRESS_H'
1 NESTED LOOPS
0 HASH JOIN
1100 HASH JOIN
550 HASH JOIN
550 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF
'PERSONADDRESS_ H'
606 NESTED LOOPS
55 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID)
OF 'INSURED_H'
55 INDEX (RANGE SCAN) OF
'INDX_INSURED_H _IDX_EDATE_CDAT E' (NON-UNIQUE)
550 INDEX (RANGE SCAN) OF
'INDX_PRSNADDR_ PRSN_ADDR_H' (NON-UNIQUE)
3 VIEW OF 'VW_SQ_2'
3 SORT (GROUP BY)
6 INDEX (FAST FULL SCAN) OF 'CI_ADDRESSTYPE _H'
(NON-UNIQUE)
6 TABLE ACCESS GOAL: ANALYZED (FULL) OF
'ADDRESSTYPE_H'
74421 VIEW OF 'VW_SQ_3'
74421 SORT (GROUP BY)
462900 TABLE ACCESS GOAL: ANALYZED (FULL) OF
'ADDRESS_H'
0 INDEX (RANGE SCAN) OF 'CI_ADDRESS_H' (NON-UNIQUE)
0 VIEW OF 'VW_SQ_1'
0 SORT (GROUP BY)
0 INDEX (FULL SCAN) OF 'INDX_PRSNADDR_ ALL' (NON-UNIQUE)
how do we tune this query..i tried writing somethin like
select distinct PA.PersonAddres s_IDX, AT.Name AddressType,
A.Line1 Address1, A.Line2 Address2, A.City, A.State,
A.County, A.Country, A.PostalCode, A.AllowPostalSo ftYN, PA.ChangedBy,
PA.ChangedDT, PA.DeletedYN ,PA.Person_Key, PA.Address_Key,
PA.AddressType_ Key
FROM PersonAddress_h PA,Address_h A,AddressType_h AT,
(select max(CHANGEDDT) maxchdt,Person_ key,AddressType _Key,Address_Ke y
from PersonAddress_h
group by Person_key,Addr essType_Key,Add ress_Key) X,
(select max(CHANGEDDT) maxchdt, Address_IDX
from Address_h
where CHANGEDDT-to_date('10/22/2003 18:02:30','mm/dd/yyyy
hh24:mi:ss')<=0 .001
group by Address_IDX) Y ,
(select max(CHANGEDDT) maxchdt,Address Type_IDX
from AddressType_h
group by AddressType_IDX ) Z
where PA.AddressType_ Key IN (1,2,3)
AND AT.AddressType_ IDX = PA.AddressType_ Key
And A.Address_IDX = PA.Address_Key and PA.DeletedYN = 0
and PA.Person_KEY in (SELECT PERSON_KEY FROM INSURED_h I where
I.insured_idx=5 92374 )
and PA.CHANGEDDT=X. maxchdt
and PA.PERSON_KEY=X .Person_key
and PA.AddressType_ Key=X.AddressTy pe_Key
and PA.Address_Key= X.Address_Key
and AT.CHANGEDDT=Y. maxchdt
and PA.AddressType_ Key=Z.AddressTy pe_IDX
and A.CHANGEDDT=Y.m axchdt
and PA.Address_Key= Y.Address_IDX
any other suggestions 3 7196
Hrishy,
I did not look for long but why is the distinct in there?
Loose that one first if it is not necessary. Secondly, what's the problem?
Why do you want to tune it, how long is it taking?
I personally do not like inline views in the query, if possible take them up
in the main query.
Please post version of Oracle you are using and why youre tables are not
analyzed.
Best regards,
--
Jasper Scholten
DBA / Application Manager / Systems Engineer
"hrishy" <hr*****@yahoo. co.uk> schreef in bericht
news:4e******** *************** ***@posting.goo gle.com... Hi All
I have the following query to be tuned..
Select distinct PA.PersonAddres s_IDX, AT.Name AddressType, A.Line1 Address1, A.Line2 Address2, A.City, A.State, A.County, A.Country, A.PostalCode, A.AllowPostalSo ftYN, PA.ChangedBy, PA.ChangedDT, PA.DeletedYN ,PA.Person_Key, PA.Address_Key, PA.AddressType_ Key FROM PersonAddress_h PA,Address_h A,AddressType_h AT where PA.AddressType_ Key IN (1,2,3) AND AT.AddressType_ IDX = PA.AddressType_ Key And A.Address_IDX = PA.Address_Key and PA.DeletedYN = 0 and PA.Person_KEY in (SELECT PERSON_KEY FROM INSURED_h I where I.insured_idx=5 92374 ) and PA.CHANGEDDT=(s elect max(CHANGEDDT) from PersonAddress_h where PA.PERSON_KEY=P erson_key and AddressType_Key = PA.AddressType_ Key and Address_Key=PA. Address_Key) and AT.CHANGEDDT=(s elect max(CHANGEDDT) from AddressType_h where AddressType_IDX = PA.AddressType_ Key) and A.CHANGEDDT= (Select max(CHANGEDDT) from Address_h where Address_IDX = PA.Address_Key and (CHANGEDDT-to_date('10/22/2003 18:02:30','mm/dd/yyyy hh24:mi:ss'))<= 0.001 )
with the plan as
Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 0 SORT (UNIQUE) 0 HASH JOIN 0 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'ADDRESS_H' 1 NESTED LOOPS 0 HASH JOIN 1100 HASH JOIN 550 HASH JOIN 550 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'PERSONADDRESS_ H' 606 NESTED LOOPS 55 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'INSURED_H' 55 INDEX (RANGE SCAN) OF 'INDX_INSURED_H _IDX_EDATE_CDAT E' (NON-UNIQUE) 550 INDEX (RANGE SCAN) OF 'INDX_PRSNADDR_ PRSN_ADDR_H' (NON-UNIQUE) 3 VIEW OF 'VW_SQ_2' 3 SORT (GROUP BY) 6 INDEX (FAST FULL SCAN) OF 'CI_ADDRESSTYPE _H' (NON-UNIQUE) 6 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'ADDRESSTYPE_H' 74421 VIEW OF 'VW_SQ_3' 74421 SORT (GROUP BY) 462900 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'ADDRESS_H' 0 INDEX (RANGE SCAN) OF 'CI_ADDRESS_H' (NON-UNIQUE) 0 VIEW OF 'VW_SQ_1' 0 SORT (GROUP BY) 0 INDEX (FULL SCAN) OF 'INDX_PRSNADDR_ ALL' (NON-UNIQUE)
how do we tune this query..i tried writing somethin like
select distinct PA.PersonAddres s_IDX, AT.Name AddressType, A.Line1 Address1, A.Line2 Address2, A.City, A.State, A.County, A.Country, A.PostalCode, A.AllowPostalSo ftYN, PA.ChangedBy, PA.ChangedDT, PA.DeletedYN ,PA.Person_Key, PA.Address_Key, PA.AddressType_ Key FROM PersonAddress_h PA,Address_h A,AddressType_h AT, (select max(CHANGEDDT) maxchdt,Person_ key,AddressType _Key,Address_Ke y from PersonAddress_h group by Person_key,Addr essType_Key,Add ress_Key) X, (select max(CHANGEDDT) maxchdt, Address_IDX from Address_h where CHANGEDDT-to_date('10/22/2003 18:02:30','mm/dd/yyyy hh24:mi:ss')<=0 .001 group by Address_IDX) Y , (select max(CHANGEDDT) maxchdt,Address Type_IDX from AddressType_h group by AddressType_IDX ) Z where PA.AddressType_ Key IN (1,2,3) AND AT.AddressType_ IDX = PA.AddressType_ Key And A.Address_IDX = PA.Address_Key and PA.DeletedYN = 0 and PA.Person_KEY in (SELECT PERSON_KEY FROM INSURED_h I where I.insured_idx=5 92374 ) and PA.CHANGEDDT=X. maxchdt and PA.PERSON_KEY=X .Person_key and PA.AddressType_ Key=X.AddressTy pe_Key and PA.Address_Key= X.Address_Key and AT.CHANGEDDT=Y. maxchdt and PA.AddressType_ Key=Z.AddressTy pe_IDX and A.CHANGEDDT=Y.m axchdt and PA.Address_Key= Y.Address_IDX
any other suggestions
Hi Jasper
Thank you very much for taking your valuable time out and galncing
over this problem.If we do not use distinct we get a different result.
I have rewritten the query like this now the response time has come
down from 3min to 50 seconds .However what baffles me is why is this
query not using the index on two tables
Select distinct PA.PersonAddres s_IDX, AT.Name AddressType,
A.Line1 Address1, A.Line2 Address2, A.City, A.State,
A.County, A.Country, A.PostalCode, A.AllowPostalSo ftYN,
PA.ChangedBy,
PA.ChangedDT, PA.DeletedYN ,PA.Person_Key, PA.Address_Key,
PA.AddressType_ Key
FROM PersonAddress_h PA,Address_h A,AddressType_h AT,
(select max(CHANGEDDT)
maxchdt,Person_ key,AddressType _Key,Address_Ke y
from PersonAddress_h
group by Person_key,Addr essType_Key,Add ress_Key) X
where PA.AddressType_ Key IN (1,2,3) AND AT.AddressType_ IDX =
PA.AddressType_ Key
And A.Address_IDX = PA.Address_Key and PA.DeletedYN = 0
and PA.Person_KEY in (SELECT PERSON_KEY FROM INSURED_h I where
I.insured_idx=5 92374 )
and PA.CHANGEDDT=X. maxchdt
and PA.AddressType_ Key=X.AddressTy pe_Key
and PA.Address_Key= X.Address_Key
and AT.CHANGEDDT=(s elect max(CHANGEDDT) from AddressType_h
where AddressType_IDX = PA.AddressType_ Key)
and A.CHANGEDDT= (Select max(CHANGEDDT) from Address_h
where Address_IDX = PA.Address_Key and
(CHANGEDDT-to_date('10/22/2003
18:02:30','mm/dd/yyyy hh24:mi:ss'))<= 0.001 )
The exaplain plan now is
Rows Row Source Operation
------- ---------------------------------------------------
3 SORT UNIQUE
8 FILTER
20 SORT GROUP BY
4256 TABLE ACCESS BY INDEX ROWID ADDRESS_H
8513 NESTED LOOPS
4256 NESTED LOOPS
1120 HASH JOIN
1120 HASH JOIN
560 HASH JOIN
560 TABLE ACCESS BY INDEX ROWID PERSONADDRESS_H
617 NESTED LOOPS
56 TABLE ACCESS BY INDEX ROWID INSURED_H
56 INDEX RANGE SCAN INDX_INSURED_H_ IDX_EDATE_CDATE
(object id 35548)
560 INDEX RANGE SCAN INDX_PRSNADDR_P RSN_ADDR_H (object
id 56328)
3 VIEW
3 SORT GROUP BY
6 INDEX FAST FULL SCAN CI_ADDRESSTYPE_ H (object id
34443)
6 TABLE ACCESS FULL ADDRESSTYPE_H
459380 VIEW
459380 SORT GROUP BY
462919 TABLE ACCESS FULL ADDRESS_H
4256 INDEX RANGE SCAN INDX_PRSNADDR_A LL (object id 56331)
4256 INDEX RANGE SCAN CI_ADDRESS_H (object id 34445)
what baffles me is why the full table scans on ADDRESSTYPE_H and
ADDRESS_H
The tables ADDRESSTYPE_H and ADDRESS_H contain 464080 and 8 records
respectively
Is ther a better way to rewrite thie query
regards
Hrishy
Hi All
After some research i solved this problem..now the query takes about
30 seconds ..it ws slwo initially as the literals were not able to
make use of the histogram and they were missing.After caculatiung
histograms for the missing column the query takes about 30
seconds.Jasper thank you for your help.
regards
Hrishy This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Mahesh Hardikar |
last post by:
Hi ,
Oracle 8.1.7.0.0 on HP-UX 11.0
I am a newbie as far as PL-SQL is concerned . I have Sybase/MSSQL
T-SQL background.
We have a report which uses a select statement . This select statement
joins 15 tables . SOme of the tables are outer joined.
It runs much slow when parameters (From & To Date) are for a month.
|
by: Bob |
last post by:
Hi there,
Need a little help with a certain query that's causing a lot of acid
in my stomach...
Have a table that stores sales measures for a given client. The sales
measures are stored per year and there could be multiple sales
measures every year per client. There is another field called last
update date. If there are multiple sales measures then need to select
the one that's been entered last based on this field. Also, if there
|
by: majsen |
last post by:
Hi, I have problem running this query. It will time out for me...
My database are small just about 200 members.
I have a site for swaping appartments (rental). my query should look
for match
in a triangle. Like this member A -> B->C
A give his appartment to B. B gives his appartment to C and finally
C gives his appartment to A
Soo my query looks for matching parameters like rooms, location, size
|
by: Steven D.Arnold |
last post by:
I have a query which does not use column indexes that it should use. I
have discovered some interesting behaviors of Postgres which may
indicate a bug in the database's query planning.
Take a look at the query below. There is a btree index on both
m.account_id and a.account_id. Query (1) does not use the index on the
messages table, instead opting for a full table scan, thus killing
performance. The messages table can contain...
|
by: Peter Alberer |
last post by:
Hi there,
i have a problem with a query that uses the result of a plsql function
In the where clause:
SELECT
assignments.assignment_id,
assignments.package_id AS package_id,
assignments.title AS title,
COUNT(*) AS Count
| |
by: Raj |
last post by:
Hi all,
I have couple of questions some one plzz help
1.I have a query which run for 2 hours on my production machine, it
returns 1.5 millon rows, i looked at the explain plan it is picking up
the indexes on big table. The query joins 5 tables ( 1 has 30 million
records 4 other tables have less than 100000) i see the cost at each
step is less than 1000 so i guess it shouldn't take that long to
return the result set??? it does a sort...
|
by: mleal |
last post by:
Does anyone have some more detailed information about how Oracle and MS
implement / allow Tuning on Oracle 10g and SQL Server 2005 and the
differences between them?
Which of them, In a deep comparison about it, allow better tuning and
why.
Regards,
Marcio Evangelista
|
by: dba_222 |
last post by:
Dear experts,
I hate to ask such a seemingly dumb question.
But I have spent some time trying to solve this already
to no avail.
When I was using my query analyzer last, a few months ago, I
was tuning some strange code. I changed some settings to
see what was going on.
|
by: Vinod Sadanandan |
last post by:
A Roadmap To Query Tuning
============================
For each SQL statement, there are different approaches that could be used to retrieve the required data. Optimization is the process of choosing the most efficient way to retrieve this data based upon the evaluation of a number of different criteria. The CBO bases optimization choices on pre-gathered table and index statistics while the RBO makes it's decisions based on a set of ...
|
by: dunleav1 |
last post by:
In 9.1 and 9.5 (Linux 64 bit) when a buffer pool is set to self-
tuning, how are blocks configured in respect to blocked vs non-blocked
when self-tuning is set to on?
(ie) I have one bufferpool that is 16k that the IBMDEFAULTBP is shared
between all tablespaces.
The data tablespace has prefetch automatic set to on.
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |