You need to be careful with this scenario because it may not be more efficient, it 
depends upon your database schema. I tried this on an application we were doing and 
our situation was that it was possible to bring back 200 - 300k records (not likely, 
but possible). Our database was created in such a way that even though we tried 
bringing back the top n records, the query still had to "touch" every record in all 
the joined tables. The result was minimal to no performance increase. The moral of the 
story would be, it largely depends on your indexing and schema whether a particular 
technique will work or not.

A view, as Jon mentioned, would be a very good idea since you wouldn't have all the 
joins involved. The only thing you need to worry about with a view is the inserting 
and updating on the underlying tables and what the performance hit will be on back-end 
processing updating the view, especially if you're relying on CF to do the inserting 
and updating.

Mark


-----Original Message-----
From: jon hall [mailto:[EMAIL PROTECTED]
Sent: Wednesday, September 10, 2003 12:57 PM
To: CF-Talk
Subject: Re: Paging Principals


Since most people are not going to browse through all 100 pages of
records, pulling a 1000 records for everyone, has some obvious
inefficiencies.

I'd go for individual queries on each page, but take the 8 join query
out of CF, and make it a view. The view will help lessen the impact of
that query, and make your code less complex at the same time.

-- 
 jon
 mailto:[EMAIL PROTECTED]

Wednesday, September 10, 2003, 9:17:43 AM, you wrote:
GVB> Hi,
GVB> I have an app that queries a table and displays a subset of the query
GVB> results in a paged format, showing only 10 results per page.  Some queries
GVB> will return upwards of 1,000 rows.

GVB> This query joins quite a few tables - say 8 or so, however the query itself
GVB> only requires one table to obtain the basis of the dataset(the rest of the
GVB> tables in the join are used for display info or 'cosmetic' type
GVB> information).

GVB> Generally speaking, which of the following would be more efficient:

GVB> Option 1:
GVB> - Query database, joining 8 tables, get entire dataset (1000 rows)
GVB> - CFOUTPUT / Loop limited to start row (page ordinal) and maxrows (10)

GVB> Option 2:
GVB> - Query database only based on the results of one table (1000 rows)
GVB> - Cfoutput / Loop limited to start row (page ordinal) and maxrows (10)
GVB> - within output loop, perform second query joining the 8 tables, based on a
GVB> single primary key returned from the initial dataset. (returns single row)

GVB> In essence, the question revolves around whether it is more expensive to
GVB> pull an entire 1,000 record joined dataset in one shot, or to make the
GVB> initial query lean, and then do ten consecutive queries performing the join.
GVB> The former likely incurs more database load, while the latter would incur
GVB> more interaction with odbc.

GVB> Whew.  Interested in your answers!

GVB> Thanks,
GVB> Geoffrey Brown
GVB> ________________________
GVB> Online Operations Manager
GVB> Deerfield.com
GVB> 989.732.8856 ext. 227 (Gaylord)
GVB> 231.935.4640 ext. 123 (Traverse City)
GVB> [EMAIL PROTECTED]

GVB> http://www.deerfield.com
GVB> Personal Service with a :-)

GVB> VisNetic (viz-net-ik) 2002: vision of the Internet http://www.visnetic.com

GVB> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/lists.cfm?link=t:4
Subscription: http://www.houseoffusion.com/lists.cfm?link=s:4
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

Your ad could be here. Monies from ads go to support these lists and provide more 
resources for the community. 
http://www.fusionauthority.com/ads.cfm

Reply via email to