Yeah, I think in the end what I will do is change a lot of the columns 
back to char from varchar.  I was thinking this would save space making 
for a smaller faster DB, but the inherent overhead in a varchar field is 
not worth the space savings, which DL made crystal clear.

Thanks,
Michael


DL Neil wrote:

>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
>




---------------------------------------------------------------------
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