LINUX.ORG.RU

PHP+MySQL скорость


0

1

Чего-то закрались сомнения, правильно ли понимаю, что скорость

$dbHandle1 = mysql_connect($dbHost,$dbUser,$dbPass);
$dbHandle2 = mysql_connect($dbHost,$dbUser,$dbPass);
$SQL1 = ...;
$SQL2 = ...;
$res1 = mysql_query($SQL1,$dbHandle1);
$res2 = mysql_query($SQL2,$dbHandle2);
будет меньше, чем
$dbHandle = mysql_connect($dbHost,$dbUser,$dbPass);
$SQL1 = ...;
$SQL2 = ...;
$res1 = mysql_query($SQL1,$dbHandle);
$res2 = mysql_query($SQL2,$dbHandle);
Причем разница будет существенной из-за того, что бОльшая часть времени тратится именно на установление соединения?


я таки думаю, что во втором случае будет медленее
так мы через один дескриптор гоняем по очереди запросы
а в первом случае можем параллельно запросить 2 sql запроса
и если уж делаешь так - делай пул коннектов и запихивай туда запросы

TERRANZ ★★★★
()

По моему, (обично) время соединения меньше, чем время выполнения запроса.

Еще, если выполнить эти запросы по очередности то второй всегда будет медленнее, поскольку MySQL хеширует результаты.

koriun
()
Ответ на: комментарий от TERRANZ

я таки думаю, что во втором случае будет медленнее

Блин, все представления ломаете(
То есть если время между запросами будет больше времени выполнения запроса - то только в этом случае скорости будут равны?
А можно пример с пулом коннектов?
Правильно ли понял:

class dbAccess
{
  private $dbh1;
  private $dbh2;
  private $dbh3;
  static $i;
  function __construct
  {
    $this->dbh1=mysql_connect();
    $this->dbh2=mysql_connect();
    $this->dbh3=mysql_connect();
  }
  function querySQL($SQL)
  {
    $this->i++; // сделать, чтоб бегал по значениям 1,2,3
    return mysql_query_sql($SQL,$this->dbh$i);
  }
}
$dbA = new dbAccess();
$dbA->querySQL($SQL1);
$dbA->querySQL($SQL2);
$dbA->querySQL($SQL3);

spdooh
() автор топика
Ответ на: комментарий от koriun

А кэш не глобальный для всех?
Или для каждого соединения свой?

spdooh
() автор топика

http://php.net/manual/ru/function.mysql-connect.php

Если второй вызов функции произошёл с теми же аргументами mysql_connect(), новое соединение не будет установлено. Вместо этого функция вернёт ссылку на уже установленное соединение. Параметр new_link может заставить функцию mysql_connect() открыть ещё одно соединение, даже если соединение с аналогичными параметрами уже открыто.

http://www.php.net/manual/ru/function.mysql-pconnect.php

mysql_pconnect() работает аналогично mysql_connect() с двумя отличиями.

Во-первых, при соединении, функция пытается найти уже открытый (постоянный) указатель на тот же сервер с тем же пользователем и паролем. Если он найден, возвращён функцией будет именно он, вместо открытия нового соединения.

Во-вторых, соединение с SQL-сервером не будет закрыто, когда работа скрипта закончится. Вместо этого, оно останется рабочим для будущего использования (mysql_close() также не закрывает постоянные соединения)

а еще я где-то читал в интернетах что mysql скоро будут депрекейтид, надо будет переписывать на pdo или mysqli

алсо вот вам таймер, замеряйте

dismal_faun ★★
()
Ответ на: комментарий от dismal_faun

>>Если второй вызов функции произошёл с теми же аргументами mysql_connect(), новое соединение не будет установлено. Вместо этого функция вернёт ссылку на уже установленное соединение.
Ы!Так это те же яйца, только в профиль!

Про таймер - понятно, но это ж надо еще тест нормальный сделать, чтоб можно было таймером засечь.
Интернеты тоже читал, но пока работает. К тому же вопрос даже больше не к конкретной реализации mysql...

spdooh
() автор топика
Ответ на: комментарий от spdooh

тест всё равно делать придется, ибо я когда-то пытался делать такие коннекты, но они начиная со второго почему-то фейлились (м.б. чего-то недонастроил в php.ini или my.cfg), в общем плюнул на них и запользовал персистент коннекты

dismal_faun ★★
()
Ответ на: комментарий от spdooh

Хотя в моем случае, скорость не сильно важна, но лучше сразу учиться писать правильно)

spdooh
() автор топика
Ответ на: комментарий от TERRANZ

> а в первом случае можем параллельно запросить 2 sql запроса

php будет выполнять эти запросы строго последовательно

поэтому разница между первым и вторым вариантом ровно время на создание одного соединения (второго)

AndreyKl ★★★★★
()
Ответ на: комментарий от dismal_faun

о, мужик, т ыдаже доки не поленился почитать!

уважуха.

итого, разница между первым и вторым вариантом - ровно время повтороного вызова функции mysql_connect (то бишь должна быть много меньше погрешности измерения).

AndreyKl ★★★★★
()

да, ТС, вопросы какие-то у тебя.. как бы сказать.. несущественные что ли..

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

во вторых, никаких преимуществ первый вариант перед вторым не имеет (я так понимаю теоретически ты хотел бы запросы к sql-серверу паралелить? таким образом это никак сделать нельзя, если что) так как запросы всё равно идут последовательно.

а может во-первых и во-вторых нужно поменять местами..

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

Проникся, осознал, ушел в гугль.
Спасибо)

spdooh
() автор топика
Ответ на: комментарий от anonymous

субд конечно выполняют паралельно, (если конечно не лочат всю таблицу нах). но php не будет _посылать_ запросы паралельно. php в данном случае дождётся выполнения первого запроса и только потом пошлёт второй. и да, кстати, не только php. в данном случае точно так же будет делать всё от явы до си. просто потому что интерфейс такой.

AndreyKl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.