大家好,提前感谢。我的观点是,在没有 where 子句的情况下进行查询时,只需要 0 秒多的时间就可以返回约 8600 行。但是,当我使用 where 子句进行查询时,例如:
SELECT * FROM myView WHERE myID = 123
根据我代替 123 的常量,查询执行时间会发生很大变化。
现在,在这种情况下,“相当大”是指略高于 0 秒和 3 到 4 秒之间的差异。但是对于某些任务,视图被频繁且重复地调用,这使得 3 秒变成了 30 秒或更多秒。
虽然我无法提供视图本身的代码,但我可以确认的是:
该视图由 6 个标准表(无特殊特性)的连接组成。
虽然表 A 中可能并不总是有与表 B 链接的记录,从而在结果中创建空列,但我已经确认此类实例不会始终导致查询时间更长或更短。
视图本身没有超出标准
Select
、、From
和子句的Left Outer Join
子句。某些 ID 总是导致查询时间长,而其他 ID 总是导致查询时间短
我已经在查询之间删除并创建了视图,以防有一个次优的缓存执行计划。
如果这些已知变量不足以将可能性降低到 2 或 3 个可能的原因,我仍然想知道什么理论问题可能导致这个问题,只是为了扩大我的理解。
再次感谢,
原型菜鸟