Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / Databases / November 2003

Tip: Looking for answers? Try searching our database.

Why does this query take forever?

Thread view: 
Ike - 25 Nov 2003 13:55 GMT
For some reason, I have a rather large (to me) query, with numerous inner
joins, accessing a remote server, and it is taking about twenty times longer
than most queries to the same database.
The query itself is built programmatically within my application, and
example of which is below. I am hoping someone in the group may have some
insight into why this query is so slow, suggesting perhaps a better
structure for it, such that I can go back in and rewrite my code that
creates such queries.

Thanks in advance, Ike

"SELECT DISTINCT
chronology.id,status_id.status,chronology.completed,chronology.completeddate
,chronology.completedtime,activities_id.activity,chronology.activities_activ
ity,chronology.activities_attachment,chronology.activities_available_to_all,
chronology.upcards_firstnamelastname,upcard_id.id,chronology.feedbackrequire
d,chronology.landondate,chronology.hasspecifictime,chronology.datetoperform,
chronology.timetoperform,chronology.duration,chronology.weekends,chronology.
prefix,statusactivitieisid.id,associateresponsible.username,activities_usern
ameid.username,chronology.editFlag FROM
chronology,status,activities,upcards,statusactivities,associates
INNER JOIN status status_id on chronology.status_id=status_id.id
INNER JOIN activities activities_id on
chronology.activities_id=activities_id.id
INNER JOIN upcards upcard_id on chronology.upcard_id=upcard_id.id
INNER JOIN statusactivities statusactivitieisid on
chronology.statusactivitieisid=statusactivitieisid.id
INNER JOIN associates associateresponsible on
chronology.associateresponsible=associateresponsible.id
INNER JOIN associates activities_usernameid on
chronology.activities_usernameid=activities_usernameid.id
WHERE chronology.upcard_id = 18"
Robert Klemme - 25 Nov 2003 14:54 GMT
> For some reason, I have a rather large (to me) query, with numerous inner
> joins, accessing a remote server, and it is taking about twenty times longer
[quoted text clipped - 8 lines]
>
> "SELECT DISTINCT

chronology.id,status_id.status,chronology.completed,chronology.completedda
te

,chronology.completedtime,activities_id.activity,chronology.activities_act
iv

ity,chronology.activities_attachment,chronology.activities_available_to_al
l,

chronology.upcards_firstnamelastname,upcard_id.id,chronology.feedbackrequi
re

d,chronology.landondate,chronology.hasspecifictime,chronology.datetoperfor
m,

chronology.timetoperform,chronology.duration,chronology.weekends,chronolog
y.

prefix,statusactivitieisid.id,associateresponsible.username,activities_use
rn
> ameid.username,chronology.editFlag FROM
> chronology,status,activities,upcards,statusactivities,associates
[quoted text clipped - 9 lines]
> chronology.activities_usernameid=activities_usernameid.id
> WHERE chronology.upcard_id = 18"

First I'd check whether all those joined tables have indexes on the id
field.  If they don't, create them and check again.

If you don't have duplicates you can omit the "DISTINCT" saving the db a
lot of work.

   robert
Ike - 25 Nov 2003 16:25 GMT
Hmmm, all the id's do have indexes. Peculiarly, when I remove distinct....it
returns nothing? Ike

> > For some reason, I have a rather large (to me) query, with numerous
> inner
[quoted text clipped - 53 lines]
>
>     robert
Robert Klemme - 25 Nov 2003 16:40 GMT
> Hmmm, all the id's do have indexes.

Darn.  If it's MS SQL Server you could throw it into the query analyzer
and look at the execution plan to get more hints about db optimization.
There's even an index optimizing wizard...

> Peculiarly, when I remove distinct....it
> returns nothing? Ike

That's irritating.  If anything it should return *more* without DISTINCT -
not less.

   robert
Ike - 25 Nov 2003 16:48 GMT
LOL, I know....I was fearing a cartesian join! -Ike

> > Hmmm, all the id's do have indexes.
>
[quoted text clipped - 9 lines]
>
>     robert
Moran Ben-David - 26 Nov 2003 18:39 GMT
which database server are you using (sql server, oracle, db2)?

> For some reason, I have a rather large (to me) query, with numerous inner
> joins, accessing a remote server, and it is taking about twenty times longer
[quoted text clipped - 8 lines]
>
> "SELECT DISTINCT

chronology.id,status_id.status,chronology.completed,chronology.completeddate

,chronology.completedtime,activities_id.activity,chronology.activities_activ

ity,chronology.activities_attachment,chronology.activities_available_to_all,

chronology.upcards_firstnamelastname,upcard_id.id,chronology.feedbackrequire

d,chronology.landondate,chronology.hasspecifictime,chronology.datetoperform,

chronology.timetoperform,chronology.duration,chronology.weekends,chronology.

prefix,statusactivitieisid.id,associateresponsible.username,activities_usern
> ameid.username,chronology.editFlag FROM
> chronology,status,activities,upcards,statusactivities,associates
[quoted text clipped - 9 lines]
> chronology.activities_usernameid=activities_usernameid.id
> WHERE chronology.upcard_id = 18"


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.