查询方式一(整表查询)
USE TSQL2012
GO
IF EXISTS(
SELECT 1
FROM Sales.Orders)
SELECT 'SELECT 1'
GO
IF EXISTS(
SELECT *
FROM Sales.Orders)
SELECT 'SELECT *'
GO此时查看执行计划是相同的,如下:

查询方式二(在索引列上条件查找)
我们对某一列创建索引
CREATE INDEX ix_shipname
ON Sales.Orders(shipname)接下来继续查看其执行计划。

此时显示查询计划依然一样。我们再来看看其他查询方式。
查询方式三(使用聚合函数)
USE TSQL2012
GO
IF (
SELECT 1
FROM Sales.Orders
WHERE shipname = 'Ship to 85-B') = 1
SELECT 'SELECT 1'
GO
IF (
SELECT COUNT(*)
FROM Sales.Orders
WHERE shipname = 'Ship to 85-B') = 1
SELECT 'SELECT *'
GO我们看到查询计划依然一样。

查询方式四(使用聚合函数Count在非索引列上查找)
USE TSQL2012
GO
IF (
SELECT COUNT(1)
FROM Sales.Orders
WHERE freight = '41.3400') = 1
SELECT 'SELECT 1'
GO
IF (
SELECT COUNT(*)
FROM Sales.Orders
WHERE freight = '41.3400') = 1
SELECT 'SELECT *'
GO我们看到执行计划还是一样。

查询方式五(子查询)
我们看看在子查询中二者性能如何
USE TSQL2012
SELECT custid, companyname FROM Sales.Customers AS C
WHERE country = N'USA' AND
EXISTS (SELECT * FROM Sales.Orders AS O WHERE O.custid = C.custid)
GO
SELECT custid, companyname FROM Sales.Customers AS C
WHERE country = N'USA' AND
EXISTS (SELECT 1 FROM Sales.Orders AS O WHERE O.custid = C.custid)此时结果二者查看执行计划还是一样

查询方式六(在视图中查询)
我们创建视图继续来比较SELECT 1和SELECT *的性能
USE TSQL2012
Go










