我正在将大量数据从多个数据库迁移到一个数据库中。作为中间步骤,我将数据复制到每种数据类型和源数据库的文件中,然后将其复制到新数据库中的一个大表中。
新表中的结构很简单,称为 migrate_data。它由 id(主键)、type_id(在数据类型集中递增)、data(包含保存我要迁移的数据的序列化 PHP 对象的字段)、source_db(显然是指源数据库)、data_type 组成(标识我们正在查看的数据类型)。
我已经为除数据字段之外的所有内容创建了按键和按键组合。目前我将数据字段设置为长文本列。用户每次插入平均需要大约 4.8 秒。我可以使用表上的 DELAY_KEY_WRITE=1 将其缩短至 4.3 秒。
我想知道是否有办法进一步提高性能。可能通过更改为不同的数据列类型。这就是为什么我询问长文本、文本和 blob。对于这种插入来说,有没有更有效的方法?
在你回答之前,让我给你提供更多信息。我将所有数据发送到插入函数,该函数获取对象,通过序列化运行它,然后运行数据插入。它也可以使用 Drupal 6(及其 db_query 函数)来完成。
任何效率的提高都会很棒。
当前表结构:
CREATE TABLE IF NOT EXISTS `migrate_data` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`type_id` int(10) unsigned NOT NULL DEFAULT '0',
`data` longtext NOT NULL,
`source_db` varchar(128) NOT NULL DEFAULT '',
`data_type` varchar(128) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `migrated_data_source` (`source_db`),
KEY `migrated_data_type_id` (`type_id`),
KEY `migrated_data_data_type` (`data_type`),
KEY `migrated_data_id__source` (`id`,`source_db`),
KEY `migrated_data_type_id__source` (`type_id`,`source_db`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 DELAY_KEY_WRITE=1;