Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Mailing Lists -> Oracle-L -> Re: Performance/Design Advice or DBA vs. Developer
Loopy and expensive?
Perhaps your duhvelopers need to take some remedial SQL classes.
A separate table is definitely easier to work with and code for.
Typical duhveloper ranting.
Jared
David Wagoner <dwagoner_at_arsenaldigital.com>
Sent by: root_at_fatcity.com
05/20/2003 08:57 AM
Please respond to ORACLE-L
To: Multiple recipients of list ORACLE-L <ORACLE-L_at_fatcity.com> cc: Subject: Performance/Design Advice or DBA vs. Developer
The developers have a new table that contains a varchar(2) column with multiple, space-separated values for backup targets on servers (I didn't do the modeling on this one). For example:
host_name backup_target dbserver1 / /etc /oracle /scripts /any/other/long/directory/name
This column started out as varchar(2) 150, then grew to varchar(2) 250,
and could potentially grow very long.
I recommended to the developers that we create a separate table to hold
the separate values as individual rows, populated via trigger from a
staging table during batch loads, something like this:
host_name backup_target dbserver1 / dbserver1 /etc dbserver1 /oracle dbserver1 /scripts dbserver1 /any/other/long/directory/name...
My reasoning is:
the backup_target column will not grow as long
reports from this table will not have to parse the data out by
space-delimiters during execution
this also seems to correspond more towards 3rd Normal Form
I'm concerned about row-chaining on such a long column
Here is the response from one of the developers:
I can maybe be convinced otherwise, but here is my thinking in support of
the "one big field" [varchar2(4000)?] theory:
Our database machines are not storage constrained, nor should they ever
be, therefore, a varchar2(a bunch) field shouldn't be that much of a
hardship. I'm unaware of performance issues that may arise by using a
varchar2 field of this size. Anybody have any info on this?
Our batch loads are hulking processor hogs. When we look for changes to
targets which we will probably do once per target list per load, we will
need to compare an unparsed class config target list to one parsed out
into 5 or 10 or 200 rows -- this is going to be very ugly, loopy,
expensive. We will also need to parse out the individual entries and
create a row for each.
The number of times that we will need to report a given target list in a
parsed format should be small; some may never be displayed. When the time
does come to report a target list, a java or perl (or even owa_pattern)
regular expression replace operation is not all that expensive in terms of
processing.
What do you guys think- anyone have experience with this type of
situation?
PS- Environment is Oracle 9.2.0.2 on Sun Solaris; the database is hybrid
OLTP and reporting.
Thanks for sharing,
David B. Wagoner
Database Administrator
--
Please see the official ORACLE-L FAQ: http://www.orafaq.net
--
Author:
INET: Jared.Still_at_radisys.com
Fat City Network Services -- 858-538-5051 http://www.fatcity.com San Diego, California -- Mailing list and web hosting services ---------------------------------------------------------------------To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing). Received on Tue May 20 2003 - 14:02:28 CDT