首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql与具有相同索引的MySQL插入性能

问Postgresql与具有相同索引的MySQL插入性能
EN

Database Administration用户
提问于 2017-04-16 19:29:38
回答 1查看 3.7K关注 0票数 0

我试图比较Postgresql和MySQL之间插入10万条记录(7列)的性能速度差异:

我获得了MySQL的以下插入查询速度:

代码语言:javascript
复制
Test 1 (primary key): 58 seconds 
Test 2 (primary key, index 1) : 52 seconds
Test 3 (primary key, index 1, index 2): 414 seconds

我获得以下Postgresql的插入查询速度:

代码语言:javascript
复制
Test 1 (primary key): 56 seconds 
Test 2 (primary key, index 1) : 52 seconds
Test 3 (primary key, index 1, index 2): 60 seconds

当我为100,000条记录添加更多索引时,Postgresql似乎不会受到insert性能的影响吗?这与Postgresql与MySQL相比使用的索引类型有关还是与内存差异有关。

EN

回答 1

Database Administration用户

发布于 2017-04-16 22:09:13

对于MySQL,我猜它陷入了I/O的困境--可能的情况:

  • 您正在使用InnoDB,而且
  • 数据+索引的总大小超过innodb_buffer_pool_size,并且
  • 慢速测试中的额外索引是非常随机的(例如UUID)

只要一切都适合buffer_pool,InnoDB就可以运行得相当快。当您耗尽缓存空间时,可能会出现大量I/O,从而减慢速度。

此外.,InnoDB缓存和延迟非唯一索引写入。但最终,写作必须完成。很难说你是否到了那个地步。

其他可能加速插入的事情:

  • 批处理,无论是通过LOAD DATA还是多行INSERTs。当每次插入100行时,后者的运行速度是原来的10倍。
  • 即使是单行INSERTs,如果没有在每一行之后运行COMMIT (例如使用autocommit=ON),运行速度也要快得多。
  • 根据某些索引,特别是某些UNIQUE索引,对数据进行排序。(这有助于缓存。)

这些只是您的基准可能偏袒或反对MySQL的一些方式。(我不能代表Postgres发言,只能说PRIMARY KEY的存储方式是完全不同的。)

反对基准的论点:索引的主要用途是在SELECT期间,那么为什么要度量INSERTs呢?另外,如果您需要每毫秒插入数以百万行的行,那么数据库何时才能找到运行SELECTs的时间?

这里是关于MySQL高速摄入的更多提示。(我不知道哪些部分也能帮助Postgres。)

基准测试中的一个常见缺陷是意外地将迭代次数(或行或其他什么)设置在某个临界点之上或以下。也许10K行对两个引擎来说都是很好的行/秒;也许100万行对两者都很糟糕,但是100 K就在“悬崖”附近-- MySQL在Postgres之前从悬崖上掉下来了。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/171147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档