Моя доктрина действительно медленная. Простой запрос и одна секунда, чтобы получить результат

Вот моя настройка:
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) 

Прежде всего, ваш код не кажется неправильным или что-то еще.

В принципе, ваш SQL-запрос будет выглядеть примерно так:

 select * from Ordering where client_id = 123456 

Это означает, что установка индекса в столбце client_id должна, вероятно, помочь – много, если в этой таблице много строк.

Несколько релевантных ссылок, о которых:

  • Синтаксис CREATE INDEX
  • Как MySQL использует индексы

Просто из любопытства вы попытались выполнить запрос RawSQL? У нас была проблема, сходная с этим, и она оказалась проблемой DNS. Несмотря на то, что все должно было быть localhost, сервер Apache шел по внешнему адресу для решения адреса mysql по какой-то причине.