正如标题所示……我试图找出开销最小的最快方法来确定表中是否存在记录。

查询样例:

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查询。

哪个更快,开销更少?(每次运行程序都会重复数万次,并且每天会运行多次)。

(从Java通过M$提供的JDBC驱动程序对M$ SQL Server运行此查询)


当前回答

选择前1个产品。产品的id。Id = ?;将优于所有建议,因为它将在找到第一个记录后终止执行。

其他回答

MySQL支持LIMIT子句来选择有限数量的记录,而Oracle使用ROWNUM。

没有什么能打败

SELECT TOP 1 1 FROM products WHERE id = 'some value';

你不需要计数来知道表中是否有数据。不必要的时候不要使用别名。

也许你想试试我的方法:

IF (SELECT TOP 1 1 FROM [TableName]) = 1
BEGIN
     --Do work
END 

选择前1个产品。产品的id。Id = ?;将优于所有建议,因为它将在找到第一个记录后终止执行。

SELECT CASE WHEN EXISTS (SELECT TOP 1 *
                         FROM dbo.[YourTable] 
                         WHERE [YourColumn] = [YourValue]) 
            THEN CAST (1 AS BIT) 
            ELSE CAST (0 AS BIT) END

此方法为您返回一个布尔值。