我想检查一个表是否包含一行。哪个更快?
IF EXISTS(SELECT * FROM TABLE)
或
IF EXISTS(SELECT TOP 1 * FROM TABLE)
答案 0 :(得分:1)
查询之间没有区别!
不会评估select中的列。 如果您还记得逻辑查询处理,则首先执行from子句。 select子句在最后一步执行(实际上是Order By,但这是一个美化的东西)。
因此,当执行from子句时,无论列名如何,都会返回行。 您必须添加列名,否则会出现语法错误
答案 1 :(得分:-1)
显然SELECT TOP 1 * FROM TABLE更快。
由于索引扫描减少到1,因此返回的行数为1 估计的运营成本也要低得多。
但如果表中只有行,则两个查询都会显示相同的操作成本。
SELECT *
FROM (SELECT top 1 *
FROM ms_data) temp
SELECT TOP 1 *
FROM ms_data
上述两个查询都有相同的运营成本。
答案 2 :(得分:-1)
IF EXISTS(SELECT 1 FROM TABLE)
更快
还有一些建议
IF EXISTS(SELECT null FROM TABLE)