2011-07-04 40 views
3

我想测试我的SQL查询(更新查询)与我的数据库上真正的“负载”的速度。我对数据库相对来说比较新鲜,而且我正在做比以前更复杂的查询,而且我越来越害怕人们谈论性能,比如“需要更新3000条记录的30秒”等等。所以我想要一个具体的试验显示我的表现将在生产中。如何将100万个条目插入我的MySQL数据库?

要实现这一点,我想添加10k,100k,1M,10M记录到我的数据库,然后运行我的查询。

我的问题是,我该怎么做?我有一个“名称”主键字段,必须是唯一的,并且是< = 15个字符并且具有字母数字输入。我希望所有创建的条目都相同的其他字段(即我想从10000开始的“foo”字段)

如果有办法做到这一点并获得约1M条目(即可能是名称冲突)没关系。我只是在寻找一个基准测试数据集。

如果有一个更好方式基准我的查询,我全部耳朵。我打算简单地执行并查看查询说明需要多长时间。

编辑:值得注意的是,这是服务器,并且与“Web”无关,所以我没有访问PHP的权限。我看到一些PHP脚本来填充,有没有办法让perl脚本写出所有这些查询,然后将它们吸入到命令行mysql工具中?

+0

不幸的是,我不知道Perl,希望别人可以帮助你解决这个问题。 –

+0

我编辑了我的回复,也许这是您正在寻找的解决方案 –

回答

2

我不知道如何使用MySQL的只是要做到这一点,但如果你有机会到PHP,然后使用此:

<?php 

    $start = time(); 
    $interval = 10000000; // 10M 
    $con = mysql_connect('server', 'user', 'pass'); 
    mysql_select_db('database'); 

    for ($i = 0; $i < $interval; $i++) 
    { 

     mysql_query('INSERT INTO TABLE (fields) VALUES (values)', $con); 

    } 

    $endt = time(); 
    $diff = ($endt - $start); 
    print("{$interval} queries took " . date('g:i:s', $diff) . " to execute."); 

?> 
+1

除此之外,还可以将多个插入批次插入到一个呼叫中。这样db可以在你的代码工作时工作,它会缩短它花费的时间。 –

+1

^显着。 – ysth

2

你只是想预先填充你的数据库,这样你就可以运行你的查询,而且你不是基准初始插入过程?

在这种情况下,只需将您的输入数据生成为制表符分隔文件并使用mysqlimport来填充数据库。

相关问题