At 10:12 AM -0500 11/12/06, Paul Houle wrote:
Paul:
Thanks very much for your most detailed answer, I'll pass it on.
I simply had a friend ask me and I didn't really know the answer, so
I asked this list.
I also should have asked, why so many columns ("fields" as us old
folk used to say)?
Cheers,
tedd
>tedd wrote:
>> Hi gang:
>>
>> I'm assuming that having 2000 fields in a table is not a problem, but
>> what is the maximum number of fields one can have in a table?
>>
>> For that matter, is there a list/reference showing the limits of MySQL?
>>
>> Thanks.
>>
>> tedd
>>
> There's supposed to be one in Appendix K of the Mysql manual, but I
>don't see a limit for the number of columns there. I suspect the number
>of columns in a table is different for different storage engines: for
>instance,
>
>http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.h
>
>says that an InnoDB table cannot have more than 1000 columns. Most
>databases (such as PostgreSQL, Oracle and Microsoft SQL Server) also
>have a limit on the total amount of data that can be in a row, although
>blobs are often stored differently... According to mysql manual,
>
>http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html
>
>"The sum of the lengths of the VARCHAR and CHAR columns in a table may
>be up to 64KB"
>
>-----
>
>However, there's a deeper question about why you want to put 2000
>columns in a table, and if that's really a good idea.
>
>I often end up working for people who start out with a filemaker
>database that grows out of control: often these people don't have any
>idea of the relational concept, so they end up building tables with
>hundreds of columns, rather than building separate tables that do a
>better job of representing the reality.
>
>For instance, imagine that an organization is keeping track of people,
>who have a relationship that changes over time. Imagine that a person
>can be in one of 30 statuses. So far so good. Now, say you want to
>keep track of the date that a person changed from one status to
>another. Quite often, filemaker users will create fields called
>'date1', 'date2', ... 'date30' to keep track of the dates.
>
>This always ends in tears.
>
>For one thing, it's impossible to represent the history of a person who
>ends up in a status twice. (Maybe they're an employee who goes on leave
>and then comes back.) The SQL coding for the above kind of system turns
>out to be painful; it's got the kind of regularity that's appealing to
>rookie programmers whose main tool is "cut-and-paste", but it's really
>unmaintainable when you need to change things in the future.
>
>Databases with huge column counts are often bad in the performance
>department. Sometimes you might just need 5 columns out of your 2000 --
>in a case like that, your database has to do 400 times more work than
>it really needs to.
>
>Tables with lots of columns are a "bad smell" that indicates a bad
>database design which could cause huge liabilities in the future. You
>really should be thinking about how to create a denornamlized database
>that has more tables with fewer columns... Here are some principles:
>
>* Never, never, never have columns with names like "something1",
>"something2", ... "something N"; instead create another table
>
>create table something (
> main_table_id integer not null,
> something_count integer not null,
> something_value varchar(255)
>)
>
>and join "something" against "main_table" when you're interested in the
>"somethings".
>
>* When you've got a lot of columns, usually some of them are optional.
>Maybe an e-commerce site has addresses for home, work, school, or
>maybe a digital library can represent many different types of things,
>such as books, audio recordings, video tapes, DVDs, unpublished
>manuscripts, etc. In a lot of cases, it makes sense to break out
>groups of optional fields (for instance, the ones relevant to video
>tapes) into their own tables, which are linked back to the main table.
>
>Years back I wrote a user management system
>(http://www.honeylocust.com/x/products/tum/) that had a number of
>columns that were regularly updated when users logged into the system.
>These were all fixed-length columns... It turns out that MyISAM has
>special optimizations for tables where all of the columns are fixed
>length. I got a big performance boost by putting the "hot" columns
>together in one table.
>_______________________________________________
>New York PHP Community MySQL SIG
>http://lists.nyphp.org/mailman/listinfo/mysql
>
>NYPHPCon 2006 Presentations Online
>http://www.nyphpcon.com
>
>Show Your Participation in New York PHP
>http://www.nyphp.org/show_participation.php
--
-------
http://sperling.com http://ancientstones.com http://earthstones.com
_______________________________________________
New York PHP Community MySQL SIG
http://lists.nyphp.org/mailman/listinfo/mysql
NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com
Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php