MySQL, MySQLi, PDO
1.
Nu3oN (22.05.2010 / 16:42)
Вот говорят MySQLi,PDO...
Провел я небольшой тест и заметил что никакой особо разницы и нет...
По крайне мере в генерации...
Вот 1000 раз выводит одну и туже запись из БД
http://sangen.ru/test2/ (с телефона не желательно лезть)
2.
Nu3oN (22.05.2010 / 16:42)
Вот код (может я че нетак делаю):
<table border="1px">
<tr>
<td>
<center><h3> MySQLi </h3></centr>
<?
/////// MySQLi ///////
$start_array = explode(" ",microtime());
$start_time = $start_array['1'] + $start_array['0'];
$mysqli = new mysqli('localhost', 'datebase', 'datebase', 'datebase');
$mysqli -> query("SET NAMES 'utf8'");
for($i=1;$i<501;$i++){
$result = $mysqli -> query('SELECT * FROM `anecdote` LIMIT 1') -> fetch_assoc();
echo $i.') '.$result['text_anecdot'].'<br /><br />';
}
$end_time = microtime(); $end_array = explode(" ",$end_time);
echo round((($end_array['1'] + $end_array['0']) - $start_time),4).'сек.<hr />';
?>
</td>
<td>
<center><h3> MySQL </h3></centr>
<?
/////// MySQL ///////
$start_array2 = explode(" ",microtime());
$start_time2 = $start_array2['1'] + $start_array2['0'];
mysql_connect('localhost', 'datebase', 'datebase');
mysql_select_db('datebase'); mysql_query('SET NAMES utf8');
for($i=1;$i<501;$i++){
$result = mysql_fetch_assoc(mysql_query("SELECT * FROM `anecdote` LIMIT 1"));
echo $i.') '.$result['text_anecdot'].'<br /><br />';
}
$end_time2 = microtime(); $end_array2 = explode(" ",$end_time2);
echo round((($end_array2['1'] + $end_array2['0']) - $start_time2),4).'сек.<hr />';
?>
</td>
<td>
<center><h3> PDO </h3></centr>
<?
/////// PDO ///////
$start_array3 = explode(" ",microtime());
$start_time3 = $start_array3['1'] + $start_array3['0'];
$pdo = new PDO('mysql:host=localhost;dbname=datebase', 'datebase', 'datebase');
$pdo->query("SET NAMES 'utf8'");
for($i=1;$i<501;$i++){
$result = $pdo->query('SELECT * FROM `anecdote` LIMIT 1')->fetch(PDO::FETCH_ASSOC);
echo $i.') '.$result['text_anecdot'].'<br /><br />';
}
$end_time3 = microtime(); $end_array3 = explode(" ",$end_time3);
echo round((($end_array3['1'] + $end_array3['0']) - $start_time3),4).'сек.<hr />';
?>
</td>
</tr>
</table>
3.
ramzes (22.05.2010 / 20:22)
Че то не осилил
об че речь?
4.
iNeeXT (22.05.2010 / 20:32)
ramzes,в тoм чтo мeждy mysqli и pdo нeт paзницы
5.
Azzido (22.05.2010 / 20:33)
Да дело впринципе не в скорости,а удобстве...
6.
Дмитрий (22.05.2010 / 20:42)
Azzido (Сегодня / 20:33)
Да дело впринципе не в скорости,а удобстве...
не только
сколько я не читал статей - везде пишут что мускли быстрее
7.
Михаил (22.05.2010 / 20:53)
Напиши везде ООП интерфейс или везде процедурный для чистоты эксперимента
8.
ramzes (22.05.2010 / 21:02)
Мускули это расширение мускул же, не ради скорости, хотя и не без этого, там много изменений, например шаблоны запросов.
С процедурным методом как то не связывался правда, все больше ооп, один раз попробывал и с тех пор мускули предпочитаю.
почему то некоторые думают что мускули это класс и все
mysqli_query() тоже можно.
А тест, пардон, ни о чем, 10к записей, 10к хитрых выборок, тогда уже можно смотреть, хотя и без этого результатов таких тестов в инете пруд пруди
4, разница есть и большая, пдо не только к мускул может обращаться.
9.
Олег (24.05.2010 / 18:42)
Для начала нужно уметь правильно проводить тесты. Это я о том, что не всегда производительность какой-либо библиотеки можно проверить вышеописанным способом. Например, целесообразнее проверять сколько та или иная библиотека кушает накладных расходах.Ведь даже если есть разница в объеме потребляемой памяти, то при запросе одно пользователя, интерперататор может считай за одинаковое время обработать процес. Потому что ему с легкостью этой памяти достаточно. А вот если таких пользователей одновременно несколько, то, естественно процесс пойдет в очередь.
p.s. ПДО и mysqli написаны обе на Си, работают на уровне расширения в качестве подключаемой библиотеки. В скорости особой разницы нет - в удобстве.
10.
Жан-Глюк Петард (25.05.2010 / 00:39)
ппц нах, prepare statemants как бы надо было юзать в вашем "тесте" скорость выполнения возрастет
И вот тут то и вылетает в трубу ваш архаичный mysql. Не говоря уже о новых возможностях и удобстве. А вообще это все не нужно Ы. Юзайте ActiveRecord.
11.
DmitryDick (25.05.2010 / 09:13)
10, раз заикнулся, то и пример своего кода давай
12.
Вантуз-мен (25.05.2010 / 09:40)
11.
dont give me names, ну вот грубый пример, у меня правда измененный класс но суть та же
<?
$dbr = DB::$dbh->prepare("INSERT INTO `voteanswer` (`answer_vote_id`, `answer_option`) VALUES (?, ?);");
foreach ($answer as $data) {
$dbr->execute($lastid, $data);
}
то есть подгатавливается запрос а в цикле все пишет, выигрыш доволно значительный
URL:
https://visavi.net/topics/9673