关于视图查询原理的问题,高手帮忙阿。牵扯到建库方向的问题。

derris 2002-03-25 03:51:52
视图不能带参数,他检索的原理是什么?
比如v_test, select * from v_test where v_test.id = 1; 他会怎样执行这个语句?会把这个参数带到视图的SQL语句中吗?还是先按照视图的语句检索出数据,再进行一次检索?那样的话会越来越慢的阿
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
derris 2002-03-25
  • 打赏
  • 举报
回复
主要是能将检索条件加上,在服务器端组合查询就好,估计他也不会那么蠢。谢谢大家。
bluepower2008 2002-03-25
  • 打赏
  • 举报
回复
视图最开始的用途就是提供给数据库用户一个逻辑视图(相对于物理视图-基本表而言),所以视图存储在数据库中只是一段SQL语句,如果在视图上做查询,正如弱水大哥所说的,是要把现有的查询条件和视图的SQL联合起来,进行查询优化,此时视图的最大好处是基本表的变动(增加字段)不会影响到视图,同时也可以简化SQL语句的写法。
至于sqlserver2000中可以建索引的视图,已经偏离了视图的初始含义了。
8992026 2002-03-25
  • 打赏
  • 举报
回复
zcflion(土匪) 的说法在逻辑上可以说是对的,但考虑速度的时候就要看它的执行机制,才能得出正确的结论。
8992026 2002-03-25
  • 打赏
  • 举报
回复
在SQL SERVER中,如果没有建立视图索引,实际的优化执行计划是把条件叠加起来一起考虑,如果建立了视图索引,那视图本身有存储,优化执行计划时就象基表一样对待。
看下面从帮助拷贝的信息:



视图解析
Microsoft® SQL Server™ 2000 查询处理器处理索引视图和非索引视图的方式不同:

索引视图以与表相同的格式存储在数据库中。查询处理器处理索引视图的方式与基表相同。


只存储非索引视图的源。查询优化器将视图源中的逻辑纳入执行计划,而该执行计划是它为引用非索引视图的 SQL 语句生成的。
SQL Server 查询优化器用于决定何时使用索引视图的逻辑与用于决定何时在表上使用索引的逻辑相似。如果索引视图中的数据包括 SQL 语句,且查询优化器确定视图上的某个索引是低成本的访问路径,则不论 WHERE 子句中是否引用了该视图,查询优化器都将选择此索引。有关更多信息,请参见解析视图上的索引。

SQL 语句引用非索引视图时,语法分析器和查询优化器分析 SQL 语句的源和视图的源,并将它们解析为单个执行计划。没有单独用于 SQL 语句或视图的计划。

例如,请看下面的视图:

USE Northwind
GO
CREATE VIEW EmployeeName AS
SELECT EmployeeID, LastName, FirstName
FROM Northwind.dbo.Employees
GO

在此视图中,这两个 SQL 语句在基表上执行相同的操作且生成相同的结果:

/* SELECT referencing the EmployeeName view. */
SELECT LastName AS EmployeeLastName,
OrderID, OrderDate
FROM Northwind.dbo.Orders AS Ord
JOIN Northwind.dbo.EmployeeName as EmpN
ON (Ord.EmployeeID = EmpN.EmployeeID)
WHERE OrderDate > '31 May, 1996'

/* SELECT referencing the Employees table directly. */
SELECT LastName AS EmployeeLastName,
OrderID, OrderDate
FROM Northwind.dbo.Orders AS Ord
JOIN Northwind.dbo.Employees as Emp
ON (Ord.EmployeeID = Emp.EmployeeID)
WHERE OrderDate > '31 May, 1996'

SQL 查询分析器的显示计划功能显示关系引擎为这两个 SELECT 语句生成相同的执行计划。

zcflion 2002-03-25
  • 打赏
  • 举报
回复
不是的,视图已经是一个特殊的结果集!!
是数据库中一种特殊的存储结构!
KingSunSha 2002-03-25
  • 打赏
  • 举报
回复
如果是oracle,rdbms会对sql做分析,不管是在view中的还是直接加在sql上的,都应该同样看待。所以结果总是经过优化的。相信在sql server或者其他的rdbms中也是有这样的优化机制。

34,590

社区成员

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

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