用Hibernate Tool 通过 Ant 执行 hbm2ddl 导出的SQL语句大体如下:create table ColumnLayout (_id varchar(36) not null unique, _version integer, _active bit not null, _enabled bit not null, _identifier varchar(255), _name varchar(255), _order integer not null, _visible bit not null, _width integer not null, tablelayout_id varchar(36), sort_idx integer, primary key (_id)) ENGINE=InnoDB;alter table ColumnLayout add index fk_tblLayout2colLayout (tablelayout_id), add constraint fk_tblLayout2colLayout foreign key (tablelayout_id) references TableLayout (_id);通过mysqldump导出的语句如下CREATE TABLE `columnlayout` (
  `_id` varchar(36) COLLATE utf8_bin NOT NULL,
  `_version` int(11) DEFAULT NULL,
  `_active` bit(1) NOT NULL,
  `_enabled` bit(1) NOT NULL,
  `_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `_order` int(11) NOT NULL,
  `_visible` bit(1) NOT NULL,
  `_width` int(11) NOT NULL,
  `tablelayout_id` varchar(36) COLLATE utf8_bin DEFAULT NULL,
  `sort_idx` int(11) DEFAULT NULL,
  PRIMARY KEY (`_id`),
  UNIQUE KEY `_id` (`_id`),
  KEY `fk_tblLayout2colLayout` (`tablelayout_id`),
  CONSTRAINT `fk_tblLayout2colLayout` FOREIGN KEY (`tablelayout_id`) REFERENCES `tablelayout` (`_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;经过测试,ant导出的语句执行效率太低,是由于alter table耗时太久。请问有什么办法可以让速度提高?谢谢

解决方案 »

  1.   

    呵呵,ALTER 是建立索引、外键,如数据量大的话,速度当然慢,用MYSQLDUMP吧
      

  2.   

    Hibernate产生的代码,我也没办法。可我不能用mysqldump,因为每天代码都在改,晚上的nightly测试都是自动生成一遍数据库。
      

  3.   

    Increase myisam_sort_buffer_size.
      

  4.   

    这是Hibernate的问题,已经得到解答了。给大家做个参考,http://forum.hibernate.org/viewtopic.php?t=990480&highlight=