MySQL, MySQLi, PDO

Печать RSS
157

N
Автор
Эцилопп сией тентуры
0
Вот говорят MySQLi,PDO...
Провел я небольшой тест и заметил что никакой особо разницы и нет...
По крайне мере в генерации...
Вот 1000 раз выводит одну и туже запись из БД http://sangen.ru/test2/ (с телефона не желательно лезть)
Изменил: Nu3oN (22.05.2010 / 16:47)
N
Автор
Эцилопп сией тентуры
0
Вот код (может я че нетак делаю):
<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>
Изменил: Nu3oN (22.05.2010 / 16:43)

2000 лет д.н.э.
0
Че то не осилилsmile об че речь?
I

Пришелец
0
ramzes,в тoм чтo мeждy mysqli и pdo нeт paзницы
A

Оранжевые штаны
0
Да дело впринципе не в скорости,а удобстве...
Д

Быдлокодер со стажем
0
Azzido (Сегодня / 20:33)
Да дело впринципе не в скорости,а удобстве...
не толькоsmile сколько я не читал статей - везде пишут что мускли быстрее
М

Малиновые штаны
0
Напиши везде ООП интерфейс или везде процедурный для чистоты эксперимента
Изменил: Михаил (22.05.2010 / 20:53)

2000 лет д.н.э.
0
Мускули это расширение мускул же, не ради скорости, хотя и не без этого, там много изменений, например шаблоны запросов.
С процедурным методом как то не связывался правда, все больше ооп, один раз попробывал и с тех пор мускули предпочитаю.
почему то некоторые думают что мускули это класс и всеsmile mysqli_query() тоже можно.
А тест, пардон, ни о чем, 10к записей, 10к хитрых выборок, тогда уже можно смотреть, хотя и без этого результатов таких тестов в инете пруд прудиsmile
4, разница есть и большая, пдо не только к мускул может обращаться.
О

Землянин
0
Для начала нужно уметь правильно проводить тесты. Это я о том, что не всегда производительность какой-либо библиотеки можно проверить вышеописанным способом. Например, целесообразнее проверять сколько та или иная библиотека кушает накладных расходах.Ведь даже если есть разница в объеме потребляемой памяти, то при запросе одно пользователя, интерперататор может считай за одинаковое время обработать процес. Потому что ему с легкостью этой памяти достаточно. А вот если таких пользователей одновременно несколько, то, естественно процесс пойдет в очередь.
p.s. ПДО и mysqli написаны обе на Си, работают на уровне расширения в качестве подключаемой библиотеки. В скорости особой разницы нет - в удобстве.
Ж

Пришелец
0
ппц нах, prepare statemants как бы надо было юзать в вашем "тесте" скорость выполнения возрастет smile И вот тут то и вылетает в трубу ваш архаичный mysql. Не говоря уже о новых возможностях и удобстве. А вообще это все не нужно Ы. Юзайте ActiveRecord.
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск