2015-06-23 55 views
-3

我有一个查询从一个已经很大(> 10.000.000行)的视图中提取数据。我知道,愚蠢的做,但坚定我的决定。Where子句的不同值会降低查询的速度

查询已经很慢了。但是,如果我更改Where标准的值,查询运行时间很长,或者似乎永远不会完成。有没有人解释这个问题?对我来说,似乎sql服务器已经优化了这个标准参数的查询,其他的需要永远。

+2

您能否给我们提供一个视图中的数据样本,您的查询代码(使用不变的where子句)和您的代码(使用更改的where子句)。如果我们不知道你的问题的细节,很难帮助你。 –

+3

听起来像索引不好或参数嗅探不好。没有任何细节,但它是一个垃圾射击实际问题是什么。 –

+1

根据您的硬件(裸机或虚拟化),10M行视图不应该太慢。我们有一个包含三个表的索引,它有大约20亿行。通过适当的索引,你的查询不应该很慢。 –

回答

4

是的,这是很正常的。不同的查询具有不同的最佳计划,如果您正确传递参数,则对所有不同的参数使用相同的执行计划。

除了数据库的重新设计,你可以尝试使用option(recompile)。请注意,这有它自己的问题 - 如增加内存消耗,延迟...

试试看看为什么问题在那里 - 看两个查询的实际执行计划通常是一个好主意。