php - Doctrine2 中的索引提示

标签 php mysql doctrine-orm

有没有办法暗示在 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/

相关文章:

php - 如何在 PHP 中使用 curl 发送接受编码 header

mysql - 连接两个表的查询

Mysql 函数确定性错误

mysql - 带有 DoctrineExtensions 的 doctrine 2 中的 FIND_IN_SET

php - 根据特定时区将当前时间插入mysql数据库

centos - 在 centos 6.4 上使用 xdebug 进行远程调试

php - 使用 Levenshtein 距离重新排列单词

mysql - 多次 Union 和 Join 操作后求和列

mysql - Doctrine、Symfony3 使用间隔从表中选择日期范围

database - 创建一个双向的多对多关联,带有额外的学说字段