是否更快过滤和获取数据或过滤然后获取数据?

时间:2010-03-16 13:35:29

标签: sql sql-server performance

我有这样的要求:

SELECT myTable.ID,
myTable.Adress,
-- 20 more columns of all kind of type
FROM myTable
WHERE EXISTS(SELECT * FROM myLink 
    WHERE myLink.FID = myTable.ID 
    and myLink.FID2 = 666)

myLink有很多行。

你认为这样做会更快:

INSERT INTO @result(ID) SELECT myLink.FID 
FROM myLink 
WHERE myLink.FID2 = 666

UPDATE @result SET Adress = myTable.Adress,
    -- 20 more columns of all kind of type 
    FROM myTable 
    WHERE myTable.ID = @result.ID

1 个答案:

答案 0 :(得分:2)

您需要选择尽可能少的行。使用where子句来过滤数据是个好主意,因为服务器必须返回更少的数据。在第二个版本中,你只选择myLink的一个项目,然后再进行处理,而在第一个例子中你有一个select *,这通常是一个坏主意。

是否有任何问题:

SELECT myTable.etc from myTable,myLink where myLink.FID2= 666 AND myLink.ID=myTable.ID 

这会在一个步骤中构建连接和过滤器。也许不同类型的连接可以更有效地工作,但代码确实看起来更短。