【问题标题】:Slow insertion speed on MYISAM table在 MISAM 表上插入速度慢
【发布时间】:2023-03-17 05:27:01
【问题描述】:

我需要创建一个包含两个属性的表:idauthor。这两个属性形成复合键。此外,我需要对 author 字段执行索引搜索。 因此,我使用以下语句创建表:

CREATE TABLE IF NOT EXISTS authors (author VARCHAR(100) NOT NULL, id VARCHAR(200) NOT NULL, INDEX USING BTREE(author,id), PRIMARY KEY (author,id)) ENGINE=MYISAM;

现在,当我尝试使用 JDBC 插入大约 450 万条记录时,插入速度最终变得非常慢。 id 属性指的是相关作者创建的出版物。一位作者与多个 id 相关,反之亦然。相同 id 值的平均数量低于相同作者值的数量。 因此,我用交换的属性测试了相同的过程。在这种情况下,插入速度几乎保持不变。 有没有办法优化表以获得性能? 我不太清楚 MISAM 如何管理索引复合键。可能是平衡的过程是原因...

提前致谢!

【问题讨论】:

  • 为什么主键是 (author, id) 的组合?
  • 作者和 id 都不是唯一的。
  • 对不起,我的意思是复合键。刚刚更正了...

标签: mysql performance indexing myisam composite-key


【解决方案1】:

我注意到一些问题:

  • 您在同一对列(作者、id)上定义了两个索引:一个普通索引和一个主键,它也是一种特殊类型的唯一索引。
  • 索引位于非常长的 VARCHAR 值上。
  • 您的数据库不是第一范式,因为正如您所说的作者可以重复,您使用完整的作者姓名来创建关系,而您应该使用 id 并将作者放在单独的表中。

在这些更改之后,您的索引将是简单的数字类型,并且您的插入速度应该很好。

【讨论】:

  • 感谢您的回答!当然,主键已经定义了一个btree索引……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多