如何将100万个条目插入MySQL数据库?

时间:2011-07-04 23:55:47

标签: mysql sql perl

我想在我的数据库上测试我的SQL查询(更新查询)的真实“加载”的速度。我比DB更新鲜,而且我的查询比以前更复杂,而且我会因为人们谈论性能而感到害怕,比如“30条记录需要更新3000条记录”等等。所以我想要一个具体的实验显示我的表现将在制作中。

为实现这一目标,我想在我的数据库中添加10k,100k,1M,10M记录,然后运行我的查询。

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

如果有办法做到这一点,并获得大约1M条目(即可能是名称冲突),那很好。我只是在寻找基准数据集。

如果有一种更好方式来对我的查询进行基准测试,那么我会全力以赴。我打算简单地执行并查看查询所需的时间。

编辑:值得注意的是,这是针对服务器而与“网络”无关,因此我无法访问PHP。我看到一些PHP脚本要填充,有没有办法让perl脚本写出所有这些查询然后将它们吸入命令行mysql工具?

3 个答案:

答案 0 :(得分:2)

如果要优化查询,则应查看MySQL的EXPLAIN语句。 为了填充你的数据库,我建议你编写自己的litte PHP脚本或查看这个 http://www.generatedata.com

关于你的编辑: 您可以使用perl生成一个大文本文件,然后使用MySQL CLI将文件加载到表中,有关详细信息,请参阅: http://dev.mysql.com/doc/refman/5.0/en/loading-tables.html

答案 1 :(得分: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." );

?>

答案 2 :(得分:2)

您只是想预先填充数据库,以便您可以运行查询,而不是对初始插入过程进行基准测试?

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