Symfony2 Doctrine索引及相关字段

时间:2015-10-24 10:14:06

标签: symfony doctrine-orm

我有一个拥有超过100k记录的实体,并且该表的查询变得越来越慢。

这是一个与其他两个相关的实体,我想知道是否有可能索引这两个字段,因为所有查询都被这两个字段中的任何一个过滤。

我搜索谷歌并且我没有澄清。

公司是这样的:

class Ticket
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\User", inversedBy="tickets")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     **/
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="Amce\DemoBundle\Entity\Down")
     * @ORM\JoinColumn(name="related_id", referencedColumnName="id")
     **/
    private $fieldRelated;

    /**
     * @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\Up", inversedBy="tickets")
     * @ORM\JoinColumn(name="related2_id", referencedColumnName="id")
     **/
    private $fieldRelated2;

    /**
     * @var string
     *
     * @ORM\Column(name="date", type="datetime")
     */
    private $date;

我想索引字段“fieldRelated”和“fieldRelated2”。

试试这个:

 *      indexes={
 *          @ORM\Index(name="related_idx", columns={"fieldRelated"})
 *      }

但是控制台抛出了这个错误:

  

[学说\ DBAL \架构\ SchemaException]
    表'Ticket'上没有名称为'fieldRelated'的列。

2 个答案:

答案 0 :(得分:1)

  

我想索引那些字段" fieldRelated"和" fieldRelated2"。

 *      indexes={
 *          @ORM\Index(name="related_idx", columns={"fieldRelated"})
 *      }

你不能这样显式地索引外键,因为教义已经自动完成:

http://doctrine.readthedocs.org/en/latest/en/manual/defining-models.html

  

外键列由Doctrine自动编入索引以确保   发出涉及外键的查询时的最佳性能。

要弄清楚如何优化查询,请使用symfony的调试工具栏来获取查询的explain输出。

答案 1 :(得分:0)

尝试使用$ fieldRated中的属性inversedBy

/**
 * @ORM\ManyToOne(targetEntity="Amce\DemoBundle\Entity\Down" inversedBy="tickets")
 * @ORM\JoinColumn(name="related_id", referencedColumnName="id")
 **/
private $fieldRelated;