MySQL,哪种更有效的longtext,text或blob?提高插入效率

时间:2011-07-19 15:19:32

标签: php mysql sql drupal mysqli

我正在将大量数据从多个数据库迁移到一个数据库中。作为中间步骤,我将数据复制到每个数据类型和源数据库的文件中,然后将其复制到新数据库中的大表中。

新表中的结构很简单,称为migrate_data。它由一个id(主键),一个type_id(在数据类型集中递增),data(包含一个包含我正在迁移的数据的序列化PHP对象的字段),source_db(显然是指源数据库),data_type (确定我们正在查看的数据类型)。

我为数据字段以外的所有内容创建了键和键组合。目前,我将数据字段设置为longtext列。用户插入平均每个约需4.8秒。我可以使用桌子上的DELAY_KEY_WRITE = 1将其减少到4.3秒。

我想知道的是,是否有办法进一步提高性能。可能通过更改为不同的数据列类型。这就是我询问longtext vs text vs blob的原因。对于这种插入物,这些更有效吗?

在你回答之前,让我再给你一些信息。我将所有数据发送到一个insert函数,该函数接受对象,通过序列化运行它,然后运行数据插入。它也是使用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;

1 个答案:

答案 0 :(得分:14)

各种text / blob类型在PHP中的存储要求都是相同的,并且执行方式完全相同,除了文本字段需要进行字符集转换。 blob字段不是。换句话说,blob适用于存储二进制文件时必须完全相同的文本字段。文本字段用于存储可能/可以/将从一个字符集转换为另一个字符集的文本数据。