视图的工作方式 类似于表 ,但不是表。它永远不存在;它只是在引用视图名称时运行的准备好的SQL语句。IE浏览器:
CREATE VIEW foo AS SELECt * FROM barSELECt * FROM foo
…相当于运行:
SELECt x.* FROM (SELECt * FROM bar) x
MySQLDump将永远不会包含要插入视图中的行…
另外,为什么我不能在视图中使用子查询????
遗憾的是,这是出于(尽管是有问题的)设计。MySQL视图有很多限制,已记录在案:http : //dev.mysql.com/doc/refman/5.0/en/create-
view.html
因此,如果只是假想的表/准备好的语句,是否就意味着它在理论上具有与普通表/查询相同的性能(甚至更低)?
不可以。一个表可以具有关联的索引,这可以使数据检索更快(在插入/更新时要付出一定的代价)。一些数据库支持“物化”视图,即可以对其应用索引的视图-
考虑到有限的视图功能(这只在v5 IIRC中开始,很晚才开始),MySQL 不支持就 不足为奇了)。
由于视图是派生表,因此视图的性能仅取决于其建立的查询。如果该查询很烂,性能问题将只是滚雪球……也就是说,在查询视图时-
如果WHERe子句中的视图列引用未包装在函数中(IE :
WHERe v.column LIKE ..., 不是
WHEReLOWER(t.column) LIKE ...),则优化器可能会推入条件(称为谓词)添加到原始查询中-使其速度更快。



