我有两个相同的查询,除了其中一个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。