使用 SELECT * 创建 MYSQL VIEW
Posted
技术标签:
【中文标题】使用 SELECT * 创建 MYSQL VIEW【英文标题】:Creating MYSQL VIEW with SELECT * 【发布时间】:2017-11-28 22:49:11 【问题描述】:在 mysql 中创建视图
如果我写SELECT * FROM ... as a VIEW
,视图会将其永久存储为 * 还是实际选择当前列并将查询存储为那个(而不是存储SELECT *
,它将存储SELECT foo,bar,biz
等)
我多次阅读到使用SELECT * FROM ...
是不好的做法,原因有很多,包括提到的HERE 和HERE。所以我确实希望避免这些问题。
【问题讨论】:
【参考方案1】:在 MySQL 中创建存储视图可能会带来意想不到的性能后果。仔细考虑创建存储视图是否是该问题的适当解决方案。或者,创建视图是否会潜在地产生比实现它要解决的问题更大的问题。
假设表 test.foo
存在,您提出的问题可以用一个简单的测试用例来回答...
USE test ;
CREATE VIEW voo AS SELECT * FROM foo ;
SHOW CREATE VIEW voo ;
DROP VIEW voo ;
【讨论】:
感谢您的回复我不知道存在未存储的视图之类的东西,这可能会让我重写我的问题。例如,存储视图与简单地在 phpmyadmin 中创建视图不同吗? 一个 stored 视图而不是 inline 视图。在 MySQL 用语中,内联视图被称为“派生表”,例如SELECT * FROM (SELECT * FROM foo) voo
. 括号之间的位有一个“内联视图”,分配了一个别名“voo”。我们可以创建一个 stored 视图定义(作为答案中的示例),然后 SELECT * FROM voo
达到相同的净效果(和性能问题)。不同之处在于,voo
的定义存在于查询中 inline 中,并且仅在该上下文中可用。 存储的视图在其他上下文中可用。以上是关于使用 SELECT * 创建 MYSQL VIEW的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL 获取最低值的记录 | View 的 SELECT 包含 FROM 子句中的子查询
MySQL - View 的 SELECT 在 FROM 子句中包含一个子查询
为啥 MySQL View 和同一个 View 的底层 SELECT 查询返回不同的结果?