Joh*_*all 39 mysql sql sql-view
当我创建一个视图时,我基本上创建了一个新表,当它加入的一个表中的数据发生变化时,它将自动被处理; 那是对的吗?
另外为什么我不能在我的视图中使用子查询?
OMG*_*ies 52
视图的工作方式类似于表,但它不是表.它永远不存在; 它只是在引用视图名称时运行的准备好的SQL语句.IE:
CREATE VIEW foo AS
SELECT * FROM bar
SELECT * FROM foo
Run Code Online (Sandbox Code Playgroud)
......相当于运行:
SELECT x.*
FROM (SELECT * FROM bar) x
Run Code Online (Sandbox Code Playgroud)
MySQLDump永远不会包含要插入视图的行...
另外为什么我不能在我的视图中使用子查询????
遗憾的是,这是设计的(虽然有问题).MySQL视图存在许多限制,这些限制已记录在案:http://dev.mysql.com/doc/refman/5.0/en/create-view.html
第
一个表可以有索引值对应,它可以使数据检索速度更快(在一定的成本对于插入/更新).一些数据库支持"物化"视图,这些视图可以将索引应用于它们 - 鉴于视图功能有限(仅在v5 IIRC中开始,在游戏后期很晚),这不应该是MySQL 不支持的意外).
由于视图是派生表,因此视图的性能仅与构建它的查询一样好.如果该查询很糟糕,性能问题就会滚雪球...也就是说,在查询视图时 - 如果WHERE子句中的视图列引用未包含在函数中(IE : WHERE v.column LIKE ..., 不是 WHERE LOWER(t.column) LIKE ...),优化器可能会推送标准(称为谓词)到原始查询上 - 使其更快.