繁体   English   中英

mysql innodb vs myisam插入

[英]mysql innodb vs myisam inserts

我有一张1700万行的表。 我需要抓取该表的1列并将其全部插入到另一个表中。 这是我做的:

INSERT IGNORE INTO table1(name) SELECT name FROM main WHERE ID < 500001

InnoDB大约需要3分45秒

但是,MyISAM仅在4秒内执行。 为什么不同?

我看到每个人都赞扬InnoDB但老实说我不知道​​它对我来说有多好。 它慢得多。 我知道它对于完整性和诸如此类的东西很有用,但我的许多表都不会被更新(只是阅读)。 我应该打扰InnoDB吗?

差异很可能是由于innoDB的配置,比myISAM需要更多的调整。 innoDB的想法是将大部分数据保存在内存中,只有在有几个备用cpu周期时才刷新/读取到磁盘。

如果你甚至打扰InnoDB是一个非常好的问题。 如果您要继续使用MySQL,强烈建议您获得InnoDB的一些经验。 但是如果你为一个不会看到大量流量并且不担心规模的数据库做一个快速而肮脏的工作,那么MyISAM的易用性可能只是你的胜利。 在许多人只想要一个简单的数据库的情况下,InnoDB可能会有些过分。

但我的许多表都不会更新

如果您正在进行99%的阅读,您仍然可以从InnoDB获得性能提升。 如果您将缓冲池大小配置为将整个数据库保存在内存中,InnoDB将永远不必转到磁盘来获取您的数据,即使它错过了mysql查询缓存。 在MyISAM中,您很可能必须从磁盘读取行,并且您将离开操作系统为您执行缓存和优化。

InnoDB的缓冲池大小

我的第一个猜测是检查innodb_buffer_pool_size,它开箱即用,设置为8M。 建议大约占总内存的80%。 一旦达到该限制,innodb性能将显着下降,因为它需要从缓冲区中清除一些东西以便为新数据腾出空间,这可能很昂贵

自动提交= 0
此外,确保在加载表时关闭自动提交,或者每次插入时都会发生刷新。 您可以在完成后重新打开它,这是客户端设置。 非常安全。

加载表通常只发生一次
想想你是否真的想要调整数据库以适应“插入1700万行”。 你经常这样做吗? 在这种情况下,MyISAM可能会更快,但当你有100个并发连接同时读取和修改这个表时,你会发现一个经过良好调整的innoDB会赢,MyISAM会阻塞表锁。

MyISAM如何看待此操作
MyISAM在没有任何调整的情况下会非常擅长这一点,因为在封面下,您只需将每行附加到文件(并更新索引)。 您的操作系统和磁盘缓存将处理所有这些性能问题。

InnoDB如何看待这个操作
Innodb会知道表需要写入,因此它会将行抛出到插入缓冲区中。 你在下一次插入之前没有时间给它,所以innoDB没有时间处理缓冲区,它耗尽了空间,并且在写入缓冲池并更新索引时被迫“保持”插入。 接下来,你的缓冲池填满了,并且innoDB被迫“保持”插入并将一些页面从缓冲池中刷新到磁盘。 并且你像疯了一样向它投掷插入物。 请注意,当您执行此操作后调整InnoDB以快速为您提供MySQL>提示时,InnoDB仍然会陷入困境,以便赶上它的业余时间,但愿意为您执行新的事务。

必读:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html (请参阅批量数据加载提示)

你在某种程度上说得对。 InnoDB比MyISAM慢,但在哪些情况下呢? 一切都不是为了满足每个人的要求。 INNODB是一个事务性数据库引擎,而MyISAM则不是。 因此,为了使其成为ACID合规性和交易感知存储引擎,我们必须在响应时间方面支付其成本。

如果使用my.ini或其他配置文件正确调整InnoDB,则运行速度更快。

最后,我能够理解为什么人们赞扬InnoDB:

  1. 它符合ACID和事务支持引擎
  2. 在MyISAM采用表级锁时,它在处理表时采用行级锁定
  3. InnoDB对于多核/多进程机器具有高度可调性,可以提高并发性

来自我方面的最后但并非最不重要的评论; 任何东西都可以满足“每个人”的需求,所以它完全取决于您在比较两个引擎的情况。

在Wikipedia上查看MYISAM与Innodb的比较。

http://en.wikipedia.org/wiki/Comparison_of_MySQL_database_engines

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM