一个基础性的原理问题,对视图做where,有先后顺序吗?

AccessManager 2011-04-12 10:03:06
视图是2个表或者几个表的关联,关联后有几万到几十万条记录。

然后我对这个视图做where查询,其实我只需要其中的几千条数据,但是因为视图不能传参数,而且视图中的关联又确实复杂,我实在不想每到用的时候,都从最基本得连接开始写起。

我想知道,这个查询执行的顺序,是不是先把视图中的几万条记录查询出来,放到内存中,然后再从这个内存中的虚拟表中执行where语句,进行第二次筛选呢?

还是说,虽然我建了视图,但是sql2k比较智能,它会自己分析这个视图后面的where,和我从最基础的链接开始写,后面跟了where一样,一次性的把结果给出来呢?

...全文
222 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hksallen 2011-04-12
  • 打赏
  • 举报
回复
1:当 SQL 语句引用非索引视图时,分析器和查询优化器将分析 SQL 语句的源和视图的源,然后将它们解析为单个执行计划。没有单独用于 SQL 语句或视图的计划。

2:索引视图的行以表的格式存储在数据库中。如果查询优化器决定使用查询计划的索引视图,则索引视图将按照基表的处理方式进行处理

AccessManager 2011-04-12
  • 打赏
  • 举报
回复
谢谢,我等条件允许就研究下执行计划,不过现在条件受限,我没法搞,但是不知道结果睡不着觉,愁。。。

另外,自定义函数这个方法,我不是没考虑过,但是项目是个已成型的项目,现在在每个表上都加一个字段,标记出不同的客户的数据,所以才有这种需求,每个表都对应建一个函数不现实,而且自定义函数的效率太低了。现在是想尽量的对已有的视图 程序什么的,能有较少的修改。
Mr_Nice 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wxf163 的回复:]

看执行计划
[/Quote]

来的稳健
jianyireshuiqi 2011-04-12
  • 打赏
  • 举报
回复
函数可以传递参数,而且执行方式跟试图类似,可以考虑。
AccessManager 2011-04-12
  • 打赏
  • 举报
回复
谢谢楼上,2楼那个不是我问的问题,我是想知道对复杂视图执行where查询的顺序,并不是具体的条件顺序。
jianyireshuiqi 2011-04-12
  • 打赏
  • 举报
回复
我分析过执行计划,where后面先放有索引并且非字符串的字段效率高一些,但是不会太明显。
叶子 2011-04-12
  • 打赏
  • 举报
回复
我习惯
where后面先匹配int 后匹配字符串,
先匹配有索引的,后匹配没有索引的
王向飞 2011-04-12
  • 打赏
  • 举报
回复
看执行计划

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧