SQL Server查询:Where条件下的性能问题

SQL Server查询:Where条件下的性能问题,sql,sql-server,performance,where-clause,Sql,Sql Server,Performance,Where Clause,如果我运行这个查询,我在18秒内有5000条记录。2300的字段类型为1,2700的字段类型为2 如果我运行以下查询: SELECT * FROM VIEW WHERE TYPE = 1 SELECT * FROM VIEW WHERE TYPE = 2 我在40秒内有2300条记录(这可能是有意义的) 但是!如果我运行以下查询: SELECT * FROM VIEW WHERE TYPE = 1 SELECT * FROM VIEW WHERE TYPE = 2 执行到无限期(我等了5

如果我运行这个查询,我在18秒内有5000条记录。2300的字段类型为1,2700的字段类型为2

如果我运行以下查询:

SELECT * FROM VIEW WHERE TYPE = 1
SELECT * FROM VIEW WHERE TYPE = 2
我在40秒内有2300条记录(这可能是有意义的)

但是!如果我运行以下查询:

SELECT * FROM VIEW WHERE TYPE = 1
SELECT * FROM VIEW WHERE TYPE = 2
执行到无限期(我等了5个小时,然后停止了)。怎么可能呢?你知道吗


提前谢谢你

这不是最好的方法,但如果您无法获得查询计划或修改原始视图,以下方法通常会有所帮助(假设您能够创建临时表)


这个问题很可能是由于SQL Server对来自部分基础查询的行数的估计非常差造成的。这是处理复杂逻辑时的常见问题,也是在视图中嵌套视图通常是个坏主意的原因之一。将结果放到临时表中会给出一个断点,此时所涉及的行数再次变得确定。

向我们展示视图和索引定义等,解释输出。同时让我们知道基础表的大小没有看到表和嵌套的视图定义以及查询平面,我们只能猜测。如果我是你,我会删除嵌套视图,只写查询直接访问表。不幸的是,查询不是我的,我无法访问它。我只能用它们。在我看来,一个where条件起作用而另一个不起作用是非常奇怪的。如果没有查询计划,几乎不可能在这里诊断问题。最可能的原因是,在上一个案例中,步骤的估计行数与实际行数严重偏离。