Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Скорость при работе с MySQL 5


Автор: Vidocq 19.10.2007, 11:13
Какие либы следует использовать для оптимизации скорости работы с БД? Сейчас в проекте используется стандартная ext/mysql. Но так как нагрузка на серверы БД очень высока (около 44 запросов в секунду ), хотелось бы по возможности как-то оптимизировать. 
Первая мысль была - использовать ext/mysqli. Я провел несколько тестов на скорость.

ТЕСТ НА СКОРОСТЬ ВЫБОРКИ С 1 ПАРАМЕТРОМ

EXT/MYSQL
Код

$start = time();

$r_general=db_connect(get_db_name());

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

$s_query = "SELECT *
                        FROM
                                soft_update
                        WHERE
                                version > '".$i."' AND
                                enabled = 1
                        ORDER BY date_added DESC LIMIT 1";

$r_result_1 = db_query_mysqli($r_general, $s_query);
}
$end = time();
echo $start;
echo '<br>';
echo $end;



EXT/MYSQLI
Код

$mysqli = new mysqli("localhost", "root", "", "db_contalb");

$start = time();

$s_query = "SELECT *
                        FROM
                                soft_update
                        WHERE
                                version > ? AND
                                enabled = 1
                        ORDER BY date_added DESC LIMIT 1";


$stmt = $mysqli->prepare($s_query);

for($i=0;$i < 30000; $i++) 
{
    //bind parameters for markers
    $stmt->bind_param("s", $i);
    
    //execute query
    $stmt->execute();
}
$end = time();

echo $start;
echo '<br>';
echo $end;



ТЕСТ №2. FETCHING RESULTS
EXT/MYSQL
Код

$start = microtime();
$r_users=db_connect('db_contalb_users_001');

for($i_userID=1;$i_userID < 30000; $i_userID++) 
{
   
    $s_query = "
        SELECT
            id,
            affiliate_id,
            country,
            version,
            DATE_FORMAT(date_added,'%Y-%m-%d') as date_added,
            UNIX_TIMESTAMP(date_added) as unix_date_added
        FROM
            user
        WHERE
            id = " . $i_userID;
    
        $r_result = db_query($r_users,$s_query);
    
        $h_user = mysql_fetch_assoc($r_result);
}
$end = microtime();

echo $start;
echo '<br>';
echo $end;
echo '<br>';



EXT/MYSQLI

Код

$start = microtime();
echo '<br>';
echo $start;

$mysqli = new mysqli("localhost", "root", "", "db_contalb_users_001");
for($i_userID=1; $i_userID < 3001; $i_userID++) 
{
    $s_query = "
            SELECT
                id,
                affiliate_id,
                country,
                version,
                DATE_FORMAT(date_added,'%Y-%m-%d') as date_added,
                UNIX_TIMESTAMP(date_added) as unix_date_added
            FROM
                user
            WHERE
                id = ?";


    $stmt = $mysqli->prepare($s_query);

    //bind parameters for markers
    $stmt->bind_param("i", $i_userID);
    
    //execute query
    $stmt->execute();
    
    $stmt->bind_result($id, $aff_id, $country, $version, $date_added, $unix_date_added);

    // fetch value
    $stmt->fetch();
}

$end = microtime();
echo '<br>';
echo $end;




В обоих случаях ext/mysqli был быстрее. В первом случае чуть более чем на 1 секунду, во втором - на 3 секунды.

Насколько такие тесты объективны? Какие ещё библиотеки можно использовать для повышения производетельности/скорости?
Заранее благодарен

P.S. В случае ext/mysql используются custom функции из проекта. Поэтому переделывать, а взял "as is"

Автор: Ignat 21.10.2007, 13:54
Цитата(Vidocq @  19.10.2007,  11:13 Найти цитируемый пост)
В обоих случаях ext/mysqli был быстрее. В первом случае чуть более чем на 1 секунду, во втором - на 3 секунды.

Сильно сомневаюсь. Скорее всего свою роль сыграл кэш запросов. Ощутимой разницы быть не должно.
Если так уж необходим тест, то замеры выполняйте на двух серверах.

Автор: Vidocq 22.10.2007, 17:00
Ignat,  а может просто выключить кеширование? К тому же, если я понял правильно,  то кешироваться могут только запросы с неизменным текстом. Запросы же с переменными параметрами (как в моем случае) попадать в кеш не могут

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)