Yep...it depends...

what's "pretty large char fields"? The entire record is only 650
bytes...so they can't be all that large to my way of thinking..

What's "almost empty"?

run a
select length(trim(MYFLD)), count(*) as cnt
from myfile
group by length(trim(MYFLD))
order by 2 desc

If the field is CHAR(100) and most of the records have 20 chars or less...

Then you might be better off with VARCHAR(100) ALLOCATE (20)

That'd save 78 bytes for every record with less than 20 chars.

However, one additional point to consider. Are you using SQL or record
level access (RLA)?

With RLA, the system will do two disk I/Os for every record with more than
20 chars. With SQL, those 2 I/Os will only be done if you ask for MYFLD to
be returned.

(Thus the reason ALLOCATE(0) is not recommended, unless most records are
empty)

Charles


On Wed, Apr 4, 2018 at 8:30 AM, Jon Paris <jon.paris@xxxxxxxxxxxxxx> wrote:

As is often the case - it depends.

When you define a field as Varchar you can specify both a "normal" length
and a maximum length. Only the "normal" part is held with the main record
and therefore if most of your records are within that length then the file
size will reduce.

There is however an overhead for linking to the extended space - can't
recall how long it is 20 bytes is ringing a faint bell. This topic has
been discussed in the past on the Midrange list - I'd check it for you but
have to run out.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com

On Apr 4, 2018, at 10:05 AM, Jevgeni Astanovski <jevgeniast@xxxxxxxxx>
wrote:

Hi,
Does anyone here know if switching from CHAR to VARCHAR gives any
positive
effect in terms of table size?
Explain the situation briefly.
I've got an application written on ILE/C that works with rather big table
(historical data since 1996). Currently the table size is 260M records
and
PF size 170GB.
The record size is app. 650 bytes and it has some pretty large char
fields,
that can be either empty or almost empty :-)

Technically I can make a new table with VARCHARs and rewrite my program
to
use VARCHAR instead of CHAR, but shall it reduce the table size?

Somehow I suspect that it will only increase the table...

TIA and regards,
Jevgeni.
--
This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L)
mailing list
To post a message email: C400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/c400-l.


--
This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L)
mailing list
To post a message email: C400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/c400-l.



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2022 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.