我已经读过一些关于条令性能的文章,但这一查询速度太慢,似乎完全错了:
public function getBetRoundMainDataBuilder(BetRound $betRound){
$qb = $this->createQueryBuilder('br')
->select('br, uG, u, b, gG, g, t1, t2')
->where('br.id = :bID')
->setParameter('bID', $betRound->getId())
->innerJoin('br.userGroup', 'uG')
->innerJoin('uG.users', 'u')
->innerJoin('br.gameGroup', 'gG')
->leftJoin('gG.games', 'g')
->leftJoin('g.team1', 't1')
->leftJoin('g.team2', 't2')
->leftJoin('br.bets', 'b' );
return $qb;
}
我知道它有很多连接,但我想我宁愿在一个查询中查询所有内容,而不是懒惰地加载所有依赖的数据。
我已经分析了代码,尽管此查询没有选择太多数据,但数组移位需要无限时间:
我是不是漏了什么?我甚至将水合模式更改为阵列,但仍然存在问题。
更新:我现在尝试只选择部分,但没有改变太多:
->select('partial br.{id},
partial uG.{id},
partial u.{id, firstName, lastName, nickName, username, imageName},
partial b.{id, data},
partial gG.{id, title},
partial g.{id, data, date},
partial t1.{id, name, shortName, shortCode, logoName},
partial t2.{id, name, shortName, shortCode, logoName}')
下一步是将查询拆分。
更新2
这是越来越好,我有几个领域在我的视图,我需要不同的数据集。我试图将我的内容分成这些区域,并相应地查询:
主要区域的数据:
现在看起来是这样的:
$qb = $this->createQueryBuilder('br')
->select(
'partial br.{id},
partial b.{id, data},
partial gG.{id, title},
partial g.{id, data, date},
partial t1.{id, name, shortName, shortCode, logoName},
partial t2.{id, name, shortName, shortCode, logoName}'
)
->where('br.id = :bID')
->setParameter('bID', $betRound->getId())
->innerJoin('br.gameGroup', 'gG')
->leftJoin('gG.games', 'g')
->leftJoin('g.team1', 't1')
->leftJoin('g.team2', 't2')
->leftJoin('g.bets', 'b', 'WITH', 'b.user = :user')
->setParameter('user', $user->getId());
return $qb;
第二个区域是PointTable
$qb = $this->createQueryBuilder('br')
->select('br, b, u, uBs')
->where('br.id = :bID')
->setParameter('bID', $betRound->getId())
->leftJoin('br.bets', 'b')
->innerJoin('b.user', 'u')
->innerJoin('u.betroundStatus', 'uBs', 'WITH', 'uBs.betRound = :bID');
return $qb;
然后我有第三个区域,它有所有的统计数据。它基本上与第一个查询相同,但包含所有用户的赌注。我现在不确定,我是否应该只使用一个查询所有用户下注,或者为每个用户创建一个查询,或者以某种方式不同。
更新问题:
也许你会看到我有一个根实体叫做贝圆,那种启动所有查询(我现在最多4个复杂的查询从我的贝圆?我只是不知道如何在初始加载后将数据“添加”到我的关系中。正如你可能看到的,有几个连接“路径”从我的测试开始。其中之一是“游戏路径”,看起来像:
我需要所有这些数据,但是我如何获得一个根实体中具有正确关系的所有数据?如果我查询,例如,我是从游戏组开始,还是总是从我的根实体(=BetRound)开始?
实际查询(PDOStatement::execute()
)只占总数的3%。由于与数据库的交互应该是脚本中最慢的部分,所以总执行时间的3%相当快。
绝大多数时间由以下3个方法调用占用:
ArrayHydrator::hydrateRowData() // 17%
AbstractHydrator::gatherRowData() // 39%
DateTimeType::convertToPHPValue() // 16%
如果你把这个加起来,它是总数的72%。这是任何标准都无法接受的。
你只需要去追那些罪大恶极的人。把脂肪剃掉。
我认为有很多左连接可能非常慢。您应该重新生成此查询并删除这些左连接以提高性能。另外,请检查是否在数据库中正确创建了每个键和索引。
总之——这不是学说的错,而是质疑。
我开始了一个新的反应项目,我想使用笑话作为测试平台。尽管有文档、博客和许多其他资源,如stackoverflow,我总是有一个“意外令牌导入”错误,可能与巴贝尔问题有关,但我的conf似乎还不错。欢迎任何帮助。 我的Jest配置文件(在package.json中)。My package.json具有类似babel jest、babel-preset-es2015、babel preset reac
问题内容: 我正在尝试学习如何使用React和Jest进行单元测试。我遇到了以下错误: 意外的令牌导入 这是我的babel预设: 这是我要测试的文件: 这是我的package.json: 不知道为什么会给我这个信息吗? 问题答案: 您的依赖项中似乎缺少babel-jest。这就是为什么在执行测试之前不在ES6 +代码上运行的原因。
作为我的问题在x86-64中使用32位寄存器/指令的优势的后续行动,我开始衡量指令的成本。我知道这已经做过多次了(例如 Agner Fog),但我这样做是为了娱乐和自我教育。 我的测试代码非常简单(为了简单起见,这里作为伪代码,实际上是在汇编程序中): 但是有些事情还是应该考虑的。 如果循环的内部很大(大 -指令是站不住脚的。对于< code > jmp -指令,我的测试代码如下所示: 其结果是:
一种用于绘制线框样式几何体的材质。 代码示例 const material = new THREE.LineBasicMaterial( { color: 0xffffff, linewidth: 1, linecap: 'round', //ignored by WebGLRenderer linejoin: 'round' //ignored by WebGLRenderer
问题内容: 我在带有打字稿的React Router v5.1.2中使用UseHistory挂钩吗?运行单元测试时,我遇到了问题。 TypeError:无法读取未定义的属性“ history”。 我也尝试使用,但仍然无法正常工作。 问题答案: 浅化使用的反应功能组件时,我需要相同的内容。 在我的测试文件中解决了以下模拟问题:
wsl内npm命令特别的慢? 我在wsl内通过npm install XXX时 速度非常的慢。 ping 8.8.8.8 curl baidu.com 都能出来结果 为什么就npm命令特别的慢呢? 我已经按照微软官网上 将wsl设置为镜像网络模式。但是还是很慢,执行命令时不是直接说网络异常 而是一直在运行 但是最后提示超时 有大佬知道咋回事么? curl: (7) Failed to connec