如何提高数据库模式创建的性能?

时间:2014-04-15 12:56:50

标签: mysql database

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

该过程如下:

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

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

基本上,这是有效的。最大的问题是,数据库的创建和清理需要花费很多时间。是否有可能提高mysql的性能以创建表和插入数据?或者你能想到一个不同的测试过程吗?

谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

优化逻辑设计

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

  • 拥有最有效的SQL查询
  • 设计支持应用程序需求的逻辑模式(例如,列的类型等)
  • 设计权衡以更好地支持某些用例
  • 关系约束
  • 正常化

优化物理设计

物理层面处理非逻辑考虑因素,例如索引类型,表格参数等。目标是优化IO,这始终是瓶颈。调整每个表以满足其需要。可以在DBMS缓存中永久加载小表,具有低写入速率的表可以具有与具有高更新速率的表不同的设置以占用更少的磁盘空间等。根据查询,可以使用不同的索引等。您可以使用物化视图等透明地使用非规范化数据

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

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

优化维护

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

  • 保持统计数据最新
  • 定期重新排序关键表
  • 磁盘维护
  • 所有系统内容都有一个摇滚
  • 的服务器

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

代替DROP TABLE + CREATE TABLE,只需执行TRUNCATE TABLE。这可能会,也可能不会更快;试一试。

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

同样快......如果您在另一个表格中有初始数据(您可以永久保留),那么请执行

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