Michael: see also my PS comment

Dobromir: Michael and I were joking between us, hence the silly comments appearing.
I apologise if this did not communicate.
IMHO the pragmatics of the exercise made it a waste of time/effort - even when I 
over-stated the savings at
every opportunity!
On a Friday afternoon a little speculation and humor is a good way to start the 
weekend!

You are 100% correct, the disk space occupied by a table is not the sum of the the 
length of its data-rows. For
example, there is always space left for expansion/INSERTions.
However in this case, because it is a R/O table, it could be squashed right down.

I cannot comment if a table containing varchar/variable length fields can be 
compressed more or less than a
table with only fixed length fields.
Basically varchar allows one to potentially 'trade' disk space savings for a 
degradation in query response
times.

Some do not realise that by removing variable length fields to a 'companion table', 
any queries which access the
(fixed-length) table without needing to look at the variable-length field(s), will 
speed up significantly.

Thanks for providing some 'real' numbers. That was of interest.
=dn


----- Original Message -----
From: "Dobromir Velev" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: 25 January 2002 16:11
Subject: RE: Tighly packed table


> Hi,
> If your column is of type VARCHAR, you want save much space (at least not as
> much as DL Neil said). The specifications of tha varchar column type is that
> it uses as much bytes as the data in it. Of course this will make your
> indexes smaller (if this column is indexed).
> A few days before I decided to optimize one of my tables (5 milion rows) and
> altered a varchar(250) field to a varchar(100).
> The size of the MYD data file changed with less than 1Mb so you see that
> there was not much use of doing it.
>
> Dobromir Velev
> Software Developer
> http://www.websitepulse.com/
>
>
> -----Original Message-----
> From: DL Neil [mailto:[EMAIL PROTECTED]]
> Sent: Saturday, January 26, 2002 5:39 PM
> To: Michael Stearne
> Cc: Michael Stearne; Roger Karnouk; [EMAIL PROTECTED]
> Subject: Re: Tighly packed table
>
>
> Michael,
>
> Let's round it up to 3 million rows (I'm lazy at math too!)
> Let's say you currently allow 15 bytes per name.
> Let's say the longest name on file is 12 characters.
>
> The exercise would save 3 bytes/row multiplied by 3M rows, ie 9MB
> (yes, let's ignore binary-decimal differences too)
>
> If you had two name fields (first- and family-name).
> Woohoo that's a potential saving of 18MB
> I'm also generous (to a fault) so round it up to 20MB.
>
> If you go out to buy a small PC HDD today, the smallest catalog product
> might be 40GB
> (let's assume they quote formatted capacity - they don't, but there am I
> being half-full/-baked again)
>
> Thus we have the ability to save 0.0005% against total capacity of a new
> drive.
> Of course, the designer might have allowed way too much name-space (pun
> hah!) or the table may have other
> 'compressible' columns.
> Let's go for a saving of 0.001%
>
> A new drive costs how much?
> Your hourly rate is how much?
> How long will the job take you?
> How many cups of coffee is that?
> Can the client carry the cost of all that coffee?
> Won't your stomach rebel at the mistreatment?
>
> Mind you, most of the above is made up - I don't have any faults!
> Time for me to go refill my glass (with healthy fruit juice)!
> =dn
>
> PS after enjoying myself, let me point out that if the 'name' fields are
> currently defined as variable length,
> this exercise would allow you to make them fixed length. If you can 'wipe
> out' all the variable width columns in
> the table, performance will improve significantly!
>
>
> > Hahaha.  This is a static database.  But you are right I don't know
> > how much this will actually help.  Hard disk isn't an issue.  It was
> > just an experiment...(that I have no time for anyway!)
> >
> > Thanks,
> > Michael
> >
> >
> > On Friday, January 25, 2002, at 06:19 PM, DL Neil wrote:
> >
> > > ...and because no one has been really cynical...
> > >
> > > After that query runs, then prepare for a coffee overload whilst you
> > > perform the ALTER TABLE, then get ready
> > > because if you shorten the field to (say) 12 characters/bytes the
> > > very next day, someone with a 13 character
> > > name is going to try to register!
> > >
> > > I'm wondering just how much space this 'little' exercise is going to
> > > save, either as a ratio of the size of the
> > > db, or as a ratio of HDD size?
> > >
> > > My glass is half-empty!
> > > =dn
> > >
> > >
> > > ----- Original Message -----
> > > From: "Michael Stearne" <[EMAIL PROTECTED]>
> > > To: "Roger Karnouk" <[EMAIL PROTECTED]>
> > > Cc: <[EMAIL PROTECTED]>
> > > Sent: 24 January 2002 22:58
> > > Subject: Re: Tighly packed table
> > >
> > >
> > >> The problem is, this query really hurts (I don't know if it finishes)
> > >> for unindexed field for 2.9 million rows.  But I'm sure it will finish
> > >> eventually.
> > >>
> > >> Michael
> > >>
> > >> Roger Karnouk wrote:
> > >>
> > >>> select max(length(firstname)) from TableName;
> > >>>
> > >>> -----Original Message-----
> > >>> From: Michael Stearne [mailto:[EMAIL PROTECTED]]
> > >>> Sent: Thursday, January 24, 2002 4:38 PM
> > >>> To: Christopher Thompson
> > >>> Cc: [EMAIL PROTECTED]
> > >>> Subject: Re: Tighly packed table
> > >>>
> > >>>
> > >>> Christopher Thompson wrote:
> > >>>
> > >>>> At 04:10 PM 1/24/2002 -0500, Michael Stearne wrote:
> > >>>>
> > >>>>> We have a somewhat large read-only table (2.9 million recs). I am
> > >>>>> wonder if there is a utility that will look at each row of each
> > >>>>> columns and come up with a summary of the largest field (in
> > >>>>> character
> > >>>>> length) for each column.  For example, scan each row's firstname
> > >>>>> field and report that the longest first name is 12 characters.
> > >>>>> That
> > >>>>> way I can ALTER the firstname field to be a char or varchar of 12?
> > >>>>> What would be better BTW?
> > >>>>>
> > >>>>
> > >>>> I don't know if CHAR or VARCHAR is better for you but as to the
> > >>>> query
> > >>>> here, it would seem easiest to write a short program to query all
> > >>>> the
> > >>>> rows and programatically determine the longest column length.
> > >>>>
> > >>>> That said, you could probably set up a SQL statement for it.
> > >>>> There's
> > >>>> a LENGTH function in SQL, isn't there?  The statement would look
> > >>>> SIMILAR to the following:
> > >>>>
> > >>>> SELECT MAX(LENGTH(t1.FIRSTNAME)) AS fnamelength FROM TableFoo t1,
> > >>>> TableFoo t2 WHERE LENGTH(t2.FIRSTNAME) <= fnamelength;
> > >>>>
> > >>>
> > >>> Looks good to me, thanks.
> > >>>
> > >>> Michael
> > >>>
> > >>>> (Please note that my university SQL instructor pointed out that I
> > >>>> wrote SQL statements backwards to anyone else he had ever
> > >>>> taught.  For
> > >>>> that matter, I did Prolog backwards, too.  :)
> > >>>>
> > >>>>
> > >>>>
> > >>>> ---------------------------------------------------------------------
> > >>>> Before posting, please check:
> > >>>>  http://www.mysql.com/manual.php   (the manual)
> > >>>>  http://lists.mysql.com/           (the list archive)
> > >>>>
> > >>>> To request this thread, e-mail <[EMAIL PROTECTED]>
> > >>>> To unsubscribe, e-mail
> > >>>> <[EMAIL PROTECTED]>
> > >>>> Trouble unsubscribing? Try:
> > >>>> http://lists.mysql.com/php/unsubscribe.php
> > >>>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> ---------------------------------------------------------------------
> > >>> Before posting, please check:
> > >>>   http://www.mysql.com/manual.php   (the manual)
> > >>>   http://lists.mysql.com/           (the list archive)
> > >>>
> > >>> To request this thread, e-mail <[EMAIL PROTECTED]>
> > >>> To unsubscribe, e-mail
> > >>> <[EMAIL PROTECTED]>
> > >>> Trouble unsubscribing? Try:
> > >>> http://lists.mysql.com/php/unsubscribe.php
> > >>>
> > >>>
> > >>
> > >>
> > >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> Before posting, please check:
> > >>    http://www.mysql.com/manual.php   (the manual)
> > >>    http://lists.mysql.com/           (the list archive)
> > >>
> > >> To request this thread, e-mail <[EMAIL PROTECTED]>
> > >> To unsubscribe, e-mail <mysql-unsubscribe-
> > >> [EMAIL PROTECTED]>
> > >> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> > >>
> > >>
> > >
> > >
> > > ---------------------------------------------------------------------
> > > Before posting, please check:
> > >    http://www.mysql.com/manual.php   (the manual)
> > >    http://lists.mysql.com/           (the list archive)
> > >
> > > To request this thread, e-mail <[EMAIL PROTECTED]>
> > > To unsubscribe, e-mail <mysql-unsubscribe-
> > > [EMAIL PROTECTED]>
> > > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> > >
> >
> >
> > ---------------------------------------------------------------------
> > Before posting, please check:
> >    http://www.mysql.com/manual.php   (the manual)
> >    http://lists.mysql.com/           (the list archive)
> >
> > To request this thread, e-mail <[EMAIL PROTECTED]>
> > To unsubscribe, e-mail
> <[EMAIL PROTECTED]>
> > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> >
> >
>
>
>
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail
> <[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>
>
>
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail 
><[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>
>


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to