【问题标题】:How to increase the performance of database schema creation?如何提高数据库模式创建的性能?
【发布时间】:2014-04-15 12:56:49
【问题描述】:

对于我们的测试环境,我需要多次设置和拆除数据库(每个测试都应该独立运行)。

流程如下:

  • 创建数据库架构并插入必要的数据
  • 运行测试 1
  • 删除数据库中的所有表
  • 创建数据库架构并插入必要的数据
  • 运行测试 2
  • 删除数据库中的所有表
  • ...

测试用例中每个测试的架构和数据都是相同的。

基本上,这是可行的。最大的问题是,数据库的创建和清除需要很多时间。有没有可能提高mysql的创建表和插入数据的性能?或者您能想出一个不同的测试流程吗?

感谢您的帮助!

【问题讨论】:

标签: mysql database


【解决方案1】:

优化逻辑设计

逻辑级别是关于查询和表本身的结构。首先尝试最大化这一点。目标是在逻辑级别访问尽可能少的数据。

  • 拥有最高效的 SQL 查询
  • 设计支持应用程序需求的逻辑架构(例如列的类型等)
  • 设计权衡以比其他用例更好地支持某些用例
  • 关系约束
  • 标准化

优化物理设计

物理层处理非逻辑考虑,如索引类型、表参数等。目标是优化一直是瓶颈的IO。调整每张桌子以适应它的需要。小表可以永久加载到 DBMS 缓存中,低写入率的表可以与高更新率的表有不同的设置以占用更少的磁盘空间等。根据查询,可以使用不同的索引等。你可以使用物化视图等透明地非规范化数据。

  • 表参数(分配大小等)
  • 索引(组合、类型等)
  • 系统范围的参数(缓存大小等)
  • 分区
  • 非规范化

先尝试改进逻辑设计,然后再改进物理设计。 (两者之间的界限是模糊的,所以我们可以争论我的分类)。

优化维护

必须正确操作数据库才能尽可能保持高效。这包括一些可能对性能产生影响的维护任务,例如

  • 使统计数据保持最新
  • 定期对关键表重新排序
  • 磁盘维护
  • 所有系统的东西都让服务器运行起来

来源:How to increase the performance of a Database?

【讨论】:

    【解决方案2】:

    我建议你可以使用 shell、perl 或 python(init_db) 将所有需要的操作写入脚本。 第一次使用,可以手动创建、插入和删除,然后转储模式和数据。 您可以选择批量插入和删除表来删除数据以提高整体性能。 希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      而不是 DROP TABLE + CREATE TABLE,只需执行 TRUNCATE TABLE。这可能会或可能不会更快;试一试。

      如果您每次都插入多行,则要么对它们进行批处理(一个 INSERT 中的所有行),要么使用 LOAD DATA。其中任何一个都比逐行插入快得多。

      也很快...如果您在另一个表中有初始数据(您可以永久保留),那么就这样做

      CREATE TABLE test SELECT * FROM perm_table;
      ... (run tests using `test`)
      DROP TABLE test;
      

      【讨论】:

        猜你喜欢
        • 2011-01-01
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        相关资源
        最近更新 更多