【发布时间】:2011-11-05 06:13:37
【问题描述】:
我有一个大型 MySQL 表(约 1000 万行,6.5G),用于读写。它是 MyISAM,由于 MyISAM 在写入时的所有表锁,我得到了很多锁。
我决定尝试迁移到推荐用于读/写表的 InnoDB,它只锁定写入时的特定行。
转换后,我测试了插入语句,结果发现 InnoDB 表中的插入语句是 MyISAM 表中的大约 15 倍(从 0.1 秒到 1.5 秒)。这是为什么呢?
我还没有为 InnoDB 配置任何东西,并且还计划添加分区,但是这个数字对我来说仍然是出乎意料的。当然表是相同的,相同的索引等。
根据要求提供的其他信息:
2 个索引。 primary 是 Big INT 类型的 data_id,以及 varchar(255) 类型的非唯一 user_id。
插入共有约 150 行,具有相同的 user_id。
索引大小:MyISAM 200 MB,InnoDB 400MB
【问题讨论】:
-
你能给我们看看索引吗?这是导致插入时间长的最可能原因。
-
我有 2 个索引,data_id 是主键,user_id 不是唯一的。我的插入共有约 150 行,它们具有相同的 user_id(具有索引)。
-
但是每个索引的内容是什么?如果有一堆 blob,那么肯定会很难索引。但如果它们是整数或其他微不足道的类型,那么就更难理解为什么性能会变差了。
-
对不起。 user_id 是 varchar(255),data_id 是 Big INT。表中没有斑点
-
@normalppl - 有没有办法提供一个示例数据库和代码来演示您的问题?
标签: mysql database optimization innodb myisam