【发布时间】:2013-08-09 11:35:44
【问题描述】:
正如标题所暗示的...我试图找出开销最小的最快方法来确定表中是否存在记录。
示例查询:
SELECT COUNT(*) FROM products WHERE products.id = ?;
vs
SELECT COUNT(products.id) FROM products WHERE products.id = ?;
vs
SELECT products.id FROM products WHERE products.id = ?;
假设? 与'TB100' 交换...第一个和第二个查询将返回完全相同的结果(例如...1 用于此对话)。最后一个查询将按预期返回 'TB100',如果表中不存在 id,则返回任何内容。
目的是确定id 是否在表中。如果不是,程序接下来会插入该记录,如果是,程序将跳过它或执行基于本问题范围之外的其他程序逻辑的 UPDATE 查询。
哪个更快并且开销更少? (每次程序运行都会重复上万次,一天会运行很多次)。
(通过 M$ 提供的 JDBC 驱动程序从 Java 对 M$ SQL Server 运行此查询)
【问题讨论】:
-
这可能取决于数据库。例如,依靠 Postgres 是相当缓慢的。
-
抱歉,这是 Java 通过 jdbc 驱动程序与 M$ SQL 对话。我会更新我的 OP。
-
还有exists。
-
@Nikola Markovinović:在这种情况下你会如何使用它?
-
@zerkms 取决于上下文。如果在存储过程中,它将是
if exists(select null from products where id = @id);如果在由客户端select case when exists (...) then 1 else 0 end直接调用的查询中。
标签: sql sql-server performance select count