我试图比较Postgresql和MySQL之间插入10万条记录(7列)的性能速度差异:
我获得了MySQL的以下插入查询速度:
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的插入查询速度:
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相比使用的索引类型有关还是与内存差异有关。
发布于 2017-04-16 22:09:13
对于MySQL,我猜它陷入了I/O的困境--可能的情况:
innodb_buffer_pool_size,并且只要一切都适合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之前从悬崖上掉下来了。
https://dba.stackexchange.com/questions/171147
复制相似问题