我正在使用以下查询:
SELECT tProducts.intProductId, tProducts.strSKU, tProducts.strProductName,
(SELECT count(*)
FROM tProducts as tProductOptions
WHERE tProductOptions.bolDeleted = 0
AND tProductOptions.intOptionId = tProducts.intProductId)
FROM tProducts
WHERE bolDeleted = 0
AND intOptionId = 0
该表将intProductId作为整数,strSKU& strProductName as varchar和intProductId,作为一个整数,如果该行代表产品的选项,则返回intProductId。 (这不是我的架构!)
我正在尝试获取每个产品和选项数量。
它起作用并给出我期望的结果,但是当有大量数据时它很慢。
我已经添加了相关索引,但我确信必须有更好的方法来做到这一点......我只是看不到它!
(另外,我正在尝试将此查询放入Laravel Fluent中 - 但最佳选择似乎是原始的。我在这里也遗漏了一些东西吗?) 感谢
答案 0 :(得分:1)
尝试使用JOIN而不是依赖子查询重写查询 它可能会更快(但不能保证)。
SELECT t.intProductId, t.strSKU, t.strProductName, q.cnt
FROM tProducts t
LEFT JOIN (
SELECT intOptionId, count(*) cnt
FROM tProducts as tProductOptions
WHERE tProductOptions.bolDeleted = 0
GROUP BY intOptionId
) q
ON t.intProductId = q.intOptionId
WHERE t.bolDeleted = 0
AND t.intOptionId = 0