Вот моя настройка:
Windows Server 2008 R2
MySql 5.1.562
Php 5.3.2
Доктрина 1.2
У кого-нибудь есть идея, почему мой запрос занимает около одной секунды, чтобы выполнить простой запрос.
echo date("Ymd H:i:s", time()) ."::::::" . microtime(true)."<br />"; $q = Doctrine_Query::create() ->from("Ordering") ->where("client_id = ?",array($_SESSION["UserID"])); $ResProduct = $q->execute(); echo date("Ymd H:i:s", time()) ."::::::" . microtime(true)."<br />";
Вот результат 2-го эха, показывающий вам, сколько времени потребуется на выполнение запроса.
2011-04-21 01:48:24::::::1303364904.8051 2011-04-21 01:48:25::::::1303364905.8418
Другое дело, в базе данных нет данных.
редактировать
Я выполняю запрос непосредственно в консоли mysql и быстро получаю результат
mysql> select * from Ordering where client_id = 2; +----+------------+-------+------+-----------+ | id | product_id | price | qty | client_id | +----+------------+-------+------+-----------+ | 7 | 1 | 0.89 | 20 | 2 | +----+------------+-------+------+-----------+ 1 row in set (0.00 sec)
microtime(true)
вместо microtime_float()
client_id = ?
– почему вы добавляете $_SESSION["UserID"]
в массив? Я думаю, что это не нужно. Прежде всего, ваш код не кажется неправильным или что-то еще.
В принципе, ваш SQL-запрос будет выглядеть примерно так:
select * from Ordering where client_id = 123456
Это означает, что установка индекса в столбце client_id
должна, вероятно, помочь – много, если в этой таблице много строк.
Несколько релевантных ссылок, о которых:
CREATE INDEX
Просто из любопытства вы попытались выполнить запрос RawSQL? У нас была проблема, сходная с этим, и она оказалась проблемой DNS. Несмотря на то, что все должно было быть localhost, сервер Apache шел по внешнему адресу для решения адреса mysql по какой-то причине.