【问题标题】:Symfony2 Doctrine indexes with related fieldsSymfony2 具有相关字段的 Doctrine 索引
【发布时间】:2015-10-24 10:14:06
【问题描述】:

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

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

我搜了谷歌也没有说清楚。

公司是这样的:

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"})
 *      }

但控制台会抛出该错误:

[Doctrine\DBAL\Schema\SchemaException]
表 'Ticket' 上没有名称为 'fieldRelated' 的列。

【问题讨论】:

  • 用related_id替换字段相关

标签: symfony doctrine-orm


【解决方案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 输出。

【讨论】:

    【解决方案2】:

    尝试使用 $fieldRated 中的属性 inversedBy

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

    【讨论】:

    • 不,我不需要这个选项
    • 启动时是否有错误:app/console doctrine:schema:validate?
    • 是的,和我放在原帖上的一样。 There is no column with name 'fieldRelated' on table 'Ticket'.
    • 你启动了吗:app/console doctrine:schema:update
    • 你最近添加了两个相关字段吗?创建工单实体后?
    猜你喜欢
    • 2015-06-16
    • 2014-04-20
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多