条令MIN()性能低下



我有一个表(大约150列,有大约150k条记录),并用Doctrine在Symfony 3上进行了项目。项目中是显示结果的碎屑过滤器。

如果您提交表单,我会在对象$selectedInputOptions中收集数据,并且构建查询看起来像:

$query = $repository
->createQueryBuilder('t')
->select('t.idkatcountry', 't.idkatlocality', 't, MIN(t.price) AS priceFrom'......);
if(count($selectedInputOptions->getCountry()) > 0)
$query->andWhere('t.idkatcountry IN (:idkatcountry )')->setParameter('idkatcountry ', $selectedInputOptions->getCountry());

if(count($selectedInputOptions->getLocality()) > 0)
$query->andWhere('t.idkatlocality IN (:idkatlocality )')->setParameter('idkatlocality ', $selectedInputOptions->getLocality());

价格列具有decimal(15,2)数据类型

之前我在$repository->select('t.price')中,一切都还可以,但在将其更改为't, MIN(t.price) AS priceFrom'之后,查询执行时间增加了+40%,在少数情况下(表单中的任何输入为空=检查所有记录)增加了900%。

所以我的问题是:

如何缩短执行时间?(有一些想法吗?,会有助于更改日期类型范围,比如说十进制(6,2)吗?)

还有一个额外的问题:)表有大约150列,但查询使用大约10-15列进行筛选。我可以设置某种类型的索引以更快地进行选择吗?

编辑:

  • 将列价格更改为ineger-没有帮助
  • 将索引添加到列prite-没有帮助

解决方案

用CCD_ 6进行参数选择,误差不大。

Insted of:

't, MIN(t.price) AS priceFrom'

我用过:

'MIN(t.price) AS priceFrom')'

因为t占用了所有列(在我的情况下约为150),而我没有注意到这一点。。。所以现在一切都好了,时间也正常了。

在这里,您可以做一件事,通过在jsonSerialize()方法中使用unset,停止在实体中加载不需要的数据。

相关内容

  • 没有找到相关文章

最新更新