插入重复行和插入新行有什么区别

时间:2018-01-21 16:03:36

标签: database-performance in-memory-database voltdb

当我使用voltdb(内存数据库)时,我发现了一个奇怪的现象:插入重复的原始文件(500毫秒)比插入新列(10毫秒)需要更多的时间,并且表已被分区。据我所知,插入重复数据应该更快,因为不需要进行真正的插入操作。

1 个答案:

答案 0 :(得分:0)

看起来你测量的是回到客户端的响应时间,这可能无法反映执行时间。它可能取决于客户端对成功结果与错误结果的处理方式,或者可能只是随机网络延迟,或者在您发送请求之前有多少其他事务在请求之前排队。

要衡量插入新记录或尝试插入重复记录(并使其失败并返回唯一约束违规)所需的实际时间,您可能需要隔离并重复足够的事务以获得良好的效果内置统计数据的衡量标准。

假设您有一个带主键的分区表。以下是我如何衡量这一点:

  1. 调用“exec @Statistics PROCEDUREPROFILE 1;”,但您可以忽略这些初始结果。
  2. 通过调用TABLENAME.insert过程将50-100个唯一记录插入到表中。
  3. 调用“exec @Statistics PROCEDUREPROFILE 1;”并查看TABLENAME.insert过程的avg_execution_time列。此平均值应仅适用于在调用@Statistics之间执行的唯一插入。
  4. 使用TABLENAME.insert过程插入50-100个重复记录。
  5. 调用“exec @Statistics PROCEDUREPROFILE 1;”并查看TABLENAME.insert过程的avg_execution_time列。此平均值应仅适用于在调用@Statistics之间执行的重复插入。
  6. 我自己没有测试过独特的插入与插入约束违规的速度。一般来说,插入是快速的,无论结果如何,但我怀疑你的直觉是正确的,失败的重复插入可能执行得更快,因为它必须检查任何一种方式,但如果它找到重复,则不需要插入。

    免责声明:我为VoltDB工作。