【问题标题】:Does table size affect INSERT performance?表大小会影响 INSERT 性能吗?
【发布时间】:2011-09-21 23:42:32
【问题描述】:

这个问题只是为了问:

除了所有中级到高级的主题或技术(聚集索引、BULK INSERTS、导出/导入技巧等)之外,INSERT 是否需要越长的表越大?

这假设只有一个 auto-int 列 ID [即,所有新行都插入到底部,无需重新调整内存以适应特定的行定位]。


一个好的“基准 MySQL”的链接会很方便。我在学校学过 Oracle,到目前为止,我在 SO 方面的知识对我没什么帮助。

谢谢大家。

【问题讨论】:

    标签: mysql database insert computer-science


    【解决方案1】:

    是的,但重要的不是表格本身的大小,而是索引的大小。一旦索引重写开始破坏磁盘,您就会注意到速度变慢。没有索引的表(当然,您的数据库中永远不会有这样的东西)应该不会出现退化。具有最少紧凑索引的表可以增长到非常大的大小而不会出现退化。具有许多大型索引的表将很快开始降级。

    【讨论】:

      【解决方案2】:

      我的经验是,如果数据集索引不再适合内存,性能会下降。一旦发生这种情况,重复索引的检查将不得不命中磁盘,并且速度会大大降低。制作一张表,其中包含您认为必须处理的尽可能多的数据,并进行一些测试和调整。这真的是知道你会遇到什么的最好方法。

      【讨论】:

        【解决方案3】:

        我只能分享我的经验。希望有帮助。

        我当时在庞大的数据库(数百万个条目)上插入了很多行。我有一个脚本可以打印执行插入之前和之后的时间。好吧,我还没有看到性能下降。

        希望它能给你一个想法,但我是在 sqlite 上而不是在 mysql 上。

        【讨论】:

        • 如果您向我展示带有示例输出结果的性能基准测试脚本的通用版本,我会给您最佳答案。谢谢。
        • 这不是一个基准测试脚本,正如我所说,我会在查询前后打印时间,以便查看它们需要多长时间。我使用 python 脚本,这是执行此操作的语句: print datetime.datetime.now().strftime("%H:%M:%S")
        【解决方案4】:

        只要 MySQL 可以更新内存中的完整索引,速度不受影响,当它开始换出索引时,速度会变慢。如果您使用 ALTER TABLE 立即重建一个巨大的索引,就会发生这种情况。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-13
          • 1970-01-01
          • 2012-08-02
          • 2020-07-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多