加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

mysql innodb vs myisam插入

发布时间:2021-03-05 11:44:45 所属栏目:编程 来源:网络整理
导读:我有一张1700万行的表.我必要抓取该表的1列并将其所有插入到另一个表中.这是我做的: INSERT IGNORE INTO table1(name) SELECT name FROM main WHERE ID InnoDB约莫必要3分45秒 可是,MyISAM仅在4秒内执行.为什么差异? 我看到每小我私人都歌颂InnoDB但诚恳说我不

我有一张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也许会有些过度.

but many of my tables will not be updated

假如您正在举办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(请参阅批量数据加载提醒)

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读