Как я могу ВСТАВИТЬ 1 миллион записей в мою базу данных MySQL? - PullRequest
3 голосов
/ 05 июля 2011

Я хочу проверить скорость моих запросов SQL (запросов на обновление) с реальной нагрузкой на мою БД.Я относительно новичок в БД и делаю более сложные запросы, чем раньше, и меня пугают люди, которые говорят о производительности, например, «30 секунд для обновления 3000 записей» и т. Д. Поэтому я хочу иметь конкретныйэксперимент, показывающий, какова будет моя производительность на производстве.

Чтобы достичь этого, я хочу добавить записи 10 КБ, 100 КБ, 1 МБ, 10 МБ в свою БД, а затем выполнить свой запрос.

Моя проблема в том, как я могу это сделать?У меня есть поле первичного ключа «имя», которое должно быть уникальным и содержать <= 15 символов и иметь буквенно-цифровую запись.Другие поля, которые я хочу быть одинаковыми для всех созданных записей (т. Е. Поле «foo», которое я хочу начать с 10000) </p>

Если есть способ сделать это и получить примерно 1 млн записей (то есть, это может быть имястолкновения) это нормально.Я просто ищу набор данных для сравнительного анализа.

Если есть способ лучше для сравнения моего запроса, я весь слух.Я планирую просто выполнить и посмотреть, сколько времени говорит запрос.

Редактировать : Стоит отметить, что это для сервера и не имеет ничего общего с «Интернетом», поэтому у меня нет доступа к PHP.Я вижу некоторые PHP-скрипты для заполнения, возможно, есть ли способ заставить скрипт Perl записывать все эти запросы, а затем всасывать их в инструменты командной строки mysql?

Ответы [ 3 ]

2 голосов
/ 05 июля 2011

Я не уверен, как использовать только 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 голосов
/ 05 июля 2011

Вы просто хотите предварительно заполнить свою базу данных, чтобы у вас было что выполнить для ваших запросов, и вы не тестируете начальный процесс вставки?

В этом случае просто сгенерируйте свои входные данные в виде табуляции.файл с разделителями и используйте mysqlimport для заполнения вашей базы данных.

2 голосов
/ 05 июля 2011

Если вы хотите оптимизировать запросы, вам следует обратиться к выражению EXPLAIN в MySQL. Чтобы заполнить вашу базу данных, я бы посоветовал вам написать свой собственный небольшой PHP-скрипт или проверить этот http://www.generatedata.com

Относительно вашего редактирования: Вы можете сгенерировать большой текстовый файл с помощью Perl, а затем использовать MySQL CLI для загрузки файла в таблицу, для получения дополнительной информации, пожалуйста, смотрите: http://dev.mysql.com/doc/refman/5.0/en/loading-tables.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...