有没有办法暗示在 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);
}
}
关于php - Doctrine2 中的索引提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16729011/