我有一个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秒钟的时间,这是不正常的,我也不知道为什么。
答案 0 :(得分:0)
您可以尝试创建另一个表来保存所有子数据并避免继承。
将bra_file的结构镜像到另一个“缓存”表中,并使用INSERT,UPDATE和DELETE上的触发器自动更新它。