3

Doctrine2 でインデックスの使用を示唆する方法はありますか? MySQL USE INDEX 構文に相当するもの:

SELECT * FROM user u USE INDEX(my_super_index) ...
4

2 に答える 2

5

カスタム ツリー ウォーカーを使用して動作するコードの要点を見つけました: 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);
    }
}
于 2013-05-24T06:59:16.410 に答える