您好我正在为我的应用程序使用symfony 2并使用sg-datatable显示我的数据,现在要使用客户端而不是服务器端并使用此查询来提供数据表:
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('MyAppBundle:Artist')
->createQueryBuilder('c')
->select('c.id, c.name, c.sex, c.priority, c.bday, c.bmonth, c.byear')
->getQuery()
->getArrayResult();
$cacsData = $em->createQueryBuilder()
->select('a.id, r.name as role, c.title as work')
->from('MyAppBundle:CastAndCrew', 'q')
->innerJoin('q.role', 'r')
->innerJoin('q.artists', 'a')
->innerJoin('q.content', 'c')
->getQuery()
->getArrayResult();
$cacs = array();
foreach ($cacsData as $cacData) {
if (!array_key_exists($cacData['id'], $cacs)) {
$cacs[$cacData['id']] = array();
}
$cacs[$cacData['id']][] = $cacData;
}
foreach ($entities as &$artist) {
if (!array_key_exists($artist['id'], $cacs)) {
continue;
}
$roles = array();
$contents = array();
foreach ($cacs[$artist['id']] as $cac) {
$roles[] = $cac['role'];
$contents[] = $cac['work'];
}
$artist['role'] = implode('/', array_unique($roles));
$artist['works'] = implode('<br>', array_unique($contents));
}
$encoders = array(new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);
$datatable = $this->get("bbd_datatables.artist");
$datatable->setData($serializer->serialize($entities, "json"));
return $this->render('MyAppBundle:Artist:index.html.twig', array(
"datatable" => $datatable
));
}
一切都很好,但问题是查询时间,我的表中有20000多个数据并且它需要250+ ms并且因为客户端它暂停了几秒然后显示数据,任何人都可以建议我如何能够提高绩效?