简单选择查询花费的时间太长

时间:2020-07-16 22:36:36

标签: sql laravel postgresql

我有一个Laravel后端应用程序,该应用程序使用使用Postgres的多租户数据库,其中每个租户都有一个SCHEMA。因此,我有两个表 bra_product和bra_file ,它们都有一个来自特定架构的JOIN,我们将其称为“ tenant10”。

我有2500个架构,每个架构都有两列,我创建了一个名为MASTER的架构,其中架构的所有表均来自该表。

因此 master.bra_product 具有来自所有架构的所有产品的所有数据,因此此简单查询:

$size = count($productList);
$counter = 0;
for ($i = 0; $i < $size; $i++) {
    $counter++;
    $productList[$i]->srcimglist = $this->mdFile->getMasterImageByProduct($productList[$i]);
}
dd($productList);
return $productList; 

我在这里获取20种产品的清单,然后循环执行以获取每种产品的图像清单,这些产品将执行以下操作:

public function getMasterImageByProduct($product) {
    return DB::select("SELECT bra_f.*
                          FROM master.bra_file bra_f
                          WHERE bra_f.product_id = :productId
                          AND bra_f.active = true
                          ORDER BY bra_f.order", ['productId' => $product->product_id]);

}

我的master.bra_file有12.500行,我的查询花了我40秒钟的时间,这是不正常的,我也不知道为什么。

1 个答案:

答案 0 :(得分:0)

您可以尝试创建另一个表来保存所有子数据并避免继承。

将bra_file的结构镜像到另一个“缓存”表中,并使用INSERT,UPDATE和DELETE上的触发器自动更新它。

相关问题