Doctrine2 でインデックスの使用を示唆する方法はありますか? MySQL USE INDEX 構文に相当するもの:
SELECT * FROM user u USE INDEX(my_super_index) ...
Doctrine2 でインデックスの使用を示唆する方法はありますか? MySQL USE INDEX 構文に相当するもの:
SELECT * FROM user u USE INDEX(my_super_index) ...
カスタム ツリー ウォーカーを使用して動作するコードの要点を見つけました: https://gist.github.com/arnaud-lb/2704404
著者に感謝します!
ただし、MySQL とは異なる構文を使用する RDBMS では機能しません。
更新: FROM 句に複数のテーブルがあるクエリでは、前のコードは機能しません。そこで、以前のウォーカーの更新版を以下に示します。
<?php
namespace __YOUR_NAMESPACE_;
use Doctrine\ORM\Query\SqlWalker;
class UseIndexWalker extends SqlWalker
{
const HINT_USE_INDEX = 'UseIndexWalker.UseIndex';
public function walkFromClause($fromClause)
{
$sql = parent::walkFromClause($fromClause);
$index = $this->getQuery()->getHint(self::HINT_USE_INDEX);
return preg_replace('/( INNER JOIN| LEFT JOIN|$)/', sprintf(' USE INDEX(%s)\1', $index), $sql, 1);
}
}