我有一个拥有超过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'的列。
答案 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;