Какие либы следует использовать для оптимизации скорости работы с БД? Сейчас в проекте используется стандартная 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" |