在sql server中的性能?
2相关的问题:在sql server中的性能?
问题#1:
我有一个与为myTable id , name , lastname
id
是种子(PK)。
name
有索引。 //不能nullAble。
哪个查询速度更快?
select id , name , lastname from mytable where name = name //(name has index on it!)
或
select id , name , lastname from mytable
问题#2: * 现在让我们假设呐我是空的。 *
从第一样品
有选择查询SP其它的参数是@name
+ @lastName
(返回的所有行name = @name
或lastName= @lastName
)
哪个查询是快?
select id , name , lastname from mytable where
(@name is null or [email protected])
and
(@lastName is null or [email protected])
这里如果@name或@LastName是空 - 所以它不会比较名称= @名
或
select id , name , lastname from mytable where
(name = isNull(@name,name))
and
(lastName= isNull(@lastName,lastName))
这里,如果@name或@ lastName为空,所以有仍然将是均衡 的
name= name
和lastName=lastName
,我认为这是不好的 表现。
请帮忙?
如前所述,前两个查询是等价的。
name = name
总会评价为真,并且基本上会是一个不断的评价。这两个查询都将运行表扫描。
后面两个查询也应该是等效的。
ISNULL
ISNULL
可能会稍微快一些,但我怀疑它 - 优化程序将其扩展为CASE
语句,因此它可能会短路。
name = name - 将要评估每一行...所以我认为它的心脏表现...不? – 2012-01-11 12:38:18
@RoyiNamir否 - 不是,如果名称为空 - 那么它不会返回该行 – 2012-01-11 12:46:15
@RoyiNamir'name = name'是一个无意义的评估,相当于'1 = 1'。它不会被检查每一行。 – JNK 2012-01-11 13:17:40
- 双方执行,除非你的表是充满 NULL名字,只有几个名字一样有一个值 - 然后1日将执行更快,因为更少的行会返回
- 第一看起来更好,因为可以通过服务器进行优化,如果任何参数为空
'name'是可空的吗?如果是这样,“问题#1”中的查询就不一样了。 – 2012-01-11 12:35:04
@MartinSmith没有那样的。我只是认为,如果我加了哪里有索引 - 所以它会更快....不是? – 2012-01-11 12:35:12
我删除了我刚刚回复的第一条评论,并将其替换为另一条评论... – 2012-01-11 12:35:59