为什么PK过滤比其他字段过滤要慢得多?

时间:2014-02-25 18:23:11

标签: performance linq

我有两个相同的查询,除了其中一个where子句。

Table A : lookup table, 10 rows
Id (int, PK, auto increment, clustered index)
Name (varchar(500), non-clustered index)

Table B : slowly growing table, 1,000 rows 
A_Id (int, FK into A, no index)
Name (varchar(9), no index)
...

Table C : fastly growing table, 2,000,000 rows 
Name (varchar(9), part of PK)
...


The slow query takes 45 seconds:
select * from A
inner join B on A.Id = B.A_Id
inner join C on B.Name = C.Name
where A.Id = 4 and 
    ... some conditions on C ...

The fast query takes less than 1 second:
select * from A
inner join B on A.Id = B.A_Id
inner join C on B.Name = C.Name
where A.Name = 'SomeName' and 
    ... some conditions on C ...

我可能没有提供正确的信息,因为我不明白问题所在。

据我所知,聚簇索引并不总是比非聚簇索引快。不确定它是否适用于这种情况,因为查找表只有10行,并且行的布局不应对内连接产生太大影响。

可能是C的where子句以负面方式与A上的where子句交互?

任何想法都有帮助,谢谢。

更新1: 查询是从Linq生成的。他们实际上表现得同样快。看来问题出在Linq上,而不是Sql。

0 个答案:

没有答案