开发者

Table data handling - optimum usage

开发者 https://www.devze.com 2023-01-15 20:03 出处:网络
I have开发者_如何学Go a table with 8 millions records in mysql. I want to keep last one week data and delete the rest, i can take a dump and recreate the table in another schema.
  1. I have开发者_如何学Go a table with 8 millions records in mysql.

  2. I want to keep last one week data and delete the rest, i can take a dump and recreate the table in another schema.

  3. I am struggling to get the queries right, please share your views and best approaches to do this.Best way to delete so that it will not affect other tables in the production.

Thanks.


MySQL offers you a feature called partitioning. You can do a horizontal partition and split your tables by rows. 8 Million isn't that much, how is the insertion rate per week?

CREATE TABLE MyVeryLargeTable (
id SERIAL PRIMARY KEY,
my_date DATE
-- your other columns
) PARTITION BY HASH (YEARWEEK(my_date)) PARTITIONS 4;

You can read more about it here: http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

Edit: This one creates 4 partitions, so this will last for 4 weeks - therefore I suggest changing to partitions based on months / year. Partition limit is quite high but this is really a question how the insertion rate per week/month/year looks like.

Edit 2

MySQL5.0 comes with an Archive Engine, you should use this for your Archive table ( http://dev.mysql.com/tech-resources/articles/storage-engine.html ). Now how to get your data into the archive table? It seems like you have to write a cron-job that runs on the beginning of every week, moving all records to the archive table and deleting them from the original one. You could write a stored procedure for this but the cron-job needs to run on the shell. Keep in mind this could affect your data integrity in some way. What about upgrading to MySQL 5.1?

0

精彩评论

暂无评论...
验证码 换一张
取 消