Получение Doctrine для использования MySQL "FORCE INDEX" - PullRequest
2 голосов
/ 05 декабря 2009

У меня есть запрос в DQL от Doctrine, который должен быть в состоянии использовать функциональность MySQL «FORCE INDEX», чтобы значительно сократить время запроса. Ниже показано, как в основном выглядит запрос на простом SQL:

SELECT id FROM items FORCE INDEX (best_selling_idx)
WHERE price = ... (etc)
LIMIT 200;

Я предполагаю, что мне нужно расширить некоторый компонент Doctrine, чтобы иметь возможность делать это с помощью DQL (или есть способ внедрить произвольный SQL в один из запросов Doctrin?). У кого-нибудь есть идеи?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 07 декабря 2009

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

$q = new Doctrine_RawSql();
$q->select('{b.id}, {b.description}, {c.description}')
  ->from('table1 b FORCE INDEX(best_selling_idx) INNER JOIN table2 c ON b.c_id = c.id')
  ->addComponent('b', 'Table1 b')
  ->addComponent('c', 'b.Table2 c');
3 голосов
/ 10 июня 2014

Если вам не нравится нативный SQL, вы можете использовать следующий патч. https://gist.github.com/arnaud-lb/2704404

Этот патч предлагает создать только один пользовательский Walker и настроить его следующим образом

$query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'UseIndexWalker');
$query->setHint(UseIndexWalker::HINT_USE_INDEX, 'some_index_name');
1 голос
/ 05 декабря 2009

См. Родная часть SQL документации Doctrine . Вы должны быть в состоянии использовать RawSql для достижения этой цели.

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