Available in versions: Dev (3.21) | Latest (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

SQL: COUNT(*) 而不是 EXISTS()

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

你会去超市数清所有的苹果,仅仅是为了看看他们是否有苹果吗?你不会。同样地,你不应该运行一个 COUNT(*) 查询来检查值是否大于 0。使用 EXISTS 谓词来代替。

我们的模式转换功能可以自动检测你的错误查询,例如 COUNT(*) > 0 风格的查询或者 COUNT(expr) > 0 风格的查询

我们已经写过关于这个问题的博客,并对差异进行了基准测试。它确实会产生影响!

所以,不要这样做

if (create.fetchValue(selectCount().from(AUTHOR)) > 0) {
    // ...
}

但是应该这样做

if (create.fetchValue(exists(selectOne().from(AUTHOR)))) {
    // ...
}

当然,完全可以将这个 EXISTS 谓词嵌入到更复杂的查询中,并可能避免不必要的二次往返...

反馈

您对此页面有任何反馈吗? 我们很乐意倾听!

The jOOQ Logo