Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Check if PK value is in table
Message
From
09/12/2005 09:55:21
Keith Payne
Technical Marketing Solutions
Florida, United States
 
 
To
09/12/2005 02:21:28
General information
Forum:
Microsoft SQL Server
Category:
Stored procedures, Triggers, UDFs
Environment versions
SQL Server:
SQL Server 2000
Miscellaneous
Thread ID:
01076415
Message ID:
01076590
Views:
29
>>Sergey,
>>That conflicts with the rule-of-thumb: "Never use * when selecting, always specify the fields".
>>I know you are a very smart man, so I am wondering why you would do this.
>>Does it change performance or just reduce typing?
>>
>>Einar
>>
>>>I use '*' in subquery because the field list is irrelevant in this case.
>>>
IF NOT EXISTS(SELECT * FROM [MyTable] WHERE [PK] = @PK) ...
>>>
>>>
>>>
>>>>>
>>>>>
IF NOT EXISTS(SELECT [PK] FROM [MyTable] WHERE [PK] = @PK) ...
>>>>>
>>>>>If this query is used a lot, there should be a nonclustered index on PK.
>>>>
>>>>Thanks. Your way looks cleaner than my code.
>>>>
>>>>
>
>because:
>
>IF EXISTS(SELECT *)
>   SELECT 1
>
>not fail,
>then
>
>if exists(select * from mytable where pk=@pk)
>
>it is faster respect to
>
>if exists(select pk from mytable where pk=@pk)
>
>bacause the analysis is simpler.

Fabio and Sergey,

I must disagree here.

Using the same column in the select list and the where clause is a lot better than *.

First, the optimizer does not have to evaulate whether something other than an single index seek is required to satisfy the query.

Second, if the column list is from a nonclustered index, only the index leaf is locked during the query. When you use *, a shared lock is placed on the table as well as the index.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform