TYPO3 Extbase 查询总是超级慢

TYPO3 Extbase queries always super slow

拉取1000多条记录时,无论多么简单,在TYPO3中使用Extbase(在自定义扩展中),总是需要很长时间。使用自定义 SELECT 语句(如 $query->statement( "SELECT......)虽然要快得多。

我多年来一直使用 TYPO3(和 Extbase),我总是 运行 遇到这样的问题,即在处理大量(1000 多条)记录时,从任何文件中提取和显示数据table 随着记录数量的增加变得非常慢。我总是最终使用 $query->statement( "SELECT * from this or that table" ),出于某种原因,这比使用 Extbase 的内置查询方法快得多,后者使用 $query->matching(.......) ;

有谁知道如何加快常规(内置)查询方法以使其与 "custom statement method" 速度相匹配?

我从 6.x 版本开始就遇到过这个问题 - 我现在使用 9.x

Extbase 将获取关系(不是惰性加载的)并将执行大量对象映射、class 内省、SQL table/map 解析等。这就是为什么 Extbase 本质上会比您的查询慢 - Extbase 只是做了很多,不仅仅是查询。

加速方法,其相关性取决于您未描述的用例:

  • 确保作为关系一部分的每个最后 属性 存在索引和键,table 连接条件子句。
  • 将您不使用/很少用于相关特定列表视图的属性标记为延迟加载,以避免在访问它们之前查询它们。
  • 如果以上还不够:
    • 创建一个扁平化 table,其中包含从多个 table 中提取的属性。
    • 创建一个扁平的 table 作为 SQL 视图(并允许它缓存)
    • 创建一个非常有限的模型来反映您列出的对象并使用此对象(使用标准对象 table 或扁平化 table)

其中每一项都会迭代地改进性能,其中大部分 "bang for your buck" 来自最后一组建议。