gpt4 book ai didi

mysql - 如何改进 Doctriny 查询以检索大量数据?

转载 作者:行者123 更新时间:2023-11-30 00:25:37 25 4
gpt4 key购买 nike

我正在使用 Doctrine 开发 Symfony2 项目。我创建了一个函数来检索股票项目。如果我的数据库包含少于 50 000 行,它会很好地工作。但是,我的项目需要处理超过 2 000 000 行,如果我使用以下请求,则需要超过 1 分钟才能显示我的页面。

存储库(StockRepository.php):

 public function findAllQuery() {

$query = $this->createQueryBuilder('s')
->select(array('s','st','p'))
->join('s.store','st')
->join('s.product','p')
->orderBy('st.name','ASC');
return $query;

}

Controller (StockController.php):

public function indexAction() {
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('LiveDataShopBundle:Stock')->findAllQuery();

$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$entities, $this->get('request')->query->get('page', 1), 50
);

return array(
'pagination' => $pagination,
);
}

实体(Stock.php):

<?php

namespace LiveData\Bundle\ShopBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/** * Stock * * @ORM\Table() *
@ORM\Entity(repositoryClass="LiveData\Bundle\ShopBundle\Entity\StockRepository")
*/ class Stock {
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var \stdClass
*
* @ORM\ManyToOne(targetEntity="Store", inversedBy="stocks")
* @ORM\JoinColumn(name="store_id", referencedColumnName="id", onDelete="set null")
*/
private $store;

/**
* @var integer
*
* @ORM\Column(name="quantity", type="integer")
*/
private $quantity;

/**
* @var \stdClass
*
* @ORM\ManyToOne(targetEntity="Product", inversedBy="stocks")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id", onDelete="set null")
*/
private $product;


/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set store
*
* @param \stdClass $store
* @return Stock
*/
public function setStore($store)
{
$this->store = $store;

return $this;
}

/**
* Get store
*
* @return \stdClass
*/
public function getStore()
{
return $this->store;
}

/**
* Set quantity
*
* @param integer $quantity
* @return Stock
*/
public function setQuantity($quantity)
{
$this->quantity = $quantity;

return $this;
}

/**
* Get quantity
*
* @return integer
*/
public function getQuantity()
{
return $this->quantity;
}

/**
* Set product
*
* @param \stdClass $product
* @return Stock
*/
public function setProduct($product)
{
$this->product = $product;

return $this;
}

/**
* Get product
*
* @return \stdClass
*/
public function getProduct()
{
return $this->product;
} }

有什么办法可以减少处理时间吗?

提前致谢!

最佳答案

我对原则 2 不太了解,只了解原则 1。就像我在你的代码中看到的那样,你一次只显示 50 个。如果是这种情况,请尝试对股票进行计数(*),将其放入分页器中并每页仅加载 50 个(偏移量和限制)。这应该会有很大帮助。

或者使用sphinx/solr。但我认为问题在于必须将大量数据从 db 移动到doctrine2/symphony2 (2.000.000 行),尝试调试并获取更多信息。

关于mysql - 如何改进 Doctriny 查询以检索大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22912805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com