2011-07-04 41 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來填充數據庫。

相關問題