【发布时间】:2014-10-06 11:40:36
【问题描述】:
我正在尝试选择一个表并计算子表中所有分配的行,但似乎存在性能问题?
当我对我们的 Oracle 数据库运行这个 Linq 查询时,它永远不会停止:
From a In TABLE1
Select New With {
.ID = a.ID,
.COUNT = (From c In TABLE2 Where c.ID2 = a.ID).Count
}
当我查看 LINQPad 中的 SQL 时,它使用 COALESCE 和 CASE 转换如下:
SELECT t0.ID, (
SELECT COUNT(*)
FROM TABLE2 t1
WHERE COALESCE(CASE WHEN ((t1.ID2 = t0.ID)) THEN 1 ELSE 0 END, 0) <> 0
) c0
FROM TABLE1 t0
当我对数据库运行自己的查询时,只需要大约 5 秒。
SELECT t0.ID, (
SELECT COUNT(*)
FROM TABLE2 t1
WHERE t1.ID2 = t0.ID
)
FROM TABLE1 t0
有没有办法在糟糕的翻译中摆脱 COALESCE 和 CASE 或在其他地方获得一些性能?
【问题讨论】:
-
你尝试使用 GROUP JOIN 吗?
-
你能给我举个例子吗?
标签: sql oracle linq entity-framework count