当前位置: 代码迷 >> Sql Server >> 关于数据库视图的两个疑心
  详细解决方案

关于数据库视图的两个疑心

热度:33   发布时间:2016-04-24 09:23:22.0
关于数据库视图的两个疑虑
第一问:使用视图查询时是否会先生成中间的临时表?

视图为
create view vw as select * from tbl

那么,我执行
select * from vw

时,是否等效于
select * from (select * from tbl) tmptbl

也就是先由基表按视图生成中间表,再从中间表查询?


第二问:使用视图查询因为条件顺序会否降低查询效率?

已知

select * from tbl where a='AAA'  -- 结果多
select * from tbl where b='BBB'  -- 结果少

那么

select * from tbl where a='AAA' and b='BBB'  -- 效率低
select * from tbl where b='BBB' and a='AAA'  -- 效率高

这个应该没错吧?

现在,因为 a 值已知,而 b 值未知,于是,我只能创建视图
create view vw as select * from tbl where a='已确定'

那么我执行
select * from vw where b='不确定'

时,它是不是就等效于
select * from tbl where a='已确定' and b='不确定'

呢?我该如何创建视图才能让它得出
select * from tbl where b='不确定' and a='已确定'

的效果呢?
------解决思路----------------------
第一问:使用视图查询时是否会先生成中间的临时表?
视图是一张虚表,本身不存储任何数据,是若干表字段的一个逻辑组合,但确实是数据库对象,而非临时表的概念,

第二问:使用视图查询因为条件顺序会否降低查询效率?

引用
已知
SQL code

select * from tbl where a='AAA'  -- 结果多
select * from tbl where b='BBB'  -- 结果少

那么

select * from tbl where a='AAA' and b='BBB'  -- 效率低
select * from tbl where b='BBB' and a='AAA'  -- 效率高
  这个观点,我不赞同,查询时间的长短固然跟记录多少有关,但效率而言与条件的先后顺序没有多大关系吧,还请研究过的大神论证。

------解决思路----------------------
第二问:使用视图查询因为条件顺序会否降低查询效率?
   不会,mssql 会自动优化
------解决思路----------------------
第一问:使用视图查询时是否会先生成中间的临时表?
--> 不会.

第二问:使用视图查询因为条件顺序会否降低查询效率?
--> 不一定.

视图可以等效为一个查询语句而已,
查询视图时,仅将视图名替换为对应查询语句的子查询.


------解决思路----------------------
统一回复吧,非索引视图的情况下,视图仅仅是定义,你调用视图的效果等于直接调用里面的语句,至于会不会,可以分别查看执行计划,如无意外是一样的
  相关解决方案