I have three or four different ALTER TABLE commands I need to run on a
9 million row table (related to the previous email I sent).  I've
tried running it before and it just takes way too long, so I was
thinking the fastest way to get this done is to create new tables with
the final schema, then drop the old tables and rename the new ones.

There are a few ways to go about this.

1. Stop the reads/writes to the db.  Use mysqldump, truncate the
tables, drop the tables, recreate with the correct schema, then import
it again.
2. Create a new temporary table, keep the reads and writes going,
SELECT into that new table, when it catches up, turn off the
reads/writes for a short period of time while I truncate/drop then
rename the temporary table.
3. Use replication somehow to go from the old table to the new table
(can I do that?).
4. Create a new temporary table, stop reads/writes to it, then do an
INSERT INTO SELECT from the old to new table.

One slight problem with choice 2 is that I don't know how to make sure
that I know when the reads/writes are done.  Not all the tables have
an auto-increment id, so I can't just keep inserting in random ids.
As an aside, if I do INSERT INTO SELECT, does it block any operations
on the table that I'm SELECTing from?

Thanks for any insights,
Waynn

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to