我过去常常这样写我的EXISTS检查:
IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters)
BEGIN
UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters
END
以前的一位数据库管理员告诉我,当我执行EXISTS
子句时,使用SELECT 1
而不是SELECT *
IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters)
BEGIN
UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END
这真的有区别吗?
发布于 2009-10-20 21:32:56
了解这一点的最佳方法是对两个版本进行性能测试,并检查两个版本的执行计划。选择一个有很多列的表。
发布于 2009-10-21 05:37:56
这在SQL Server中没有区别,在SQL Server中也从未出现过问题。优化器知道它们是相同的。如果您查看执行计划,您会发现它们是相同的。
发布于 2009-10-21 05:36:10
就我个人而言,我发现很难相信它们不会针对相同的查询计划进行优化。但是,在您的特定情况下了解它的唯一方法是测试它。如果你有,请反馈给我!
https://stackoverflow.com/questions/1597442
复制相似问题