Mysql View 如何在内部工作?
create view testView as select * from employee;
如果运行这个会在内部发生什么?
通常,在调用它之前,创建一个视图并不会真正做太多事情。它几乎只是在使用之前得到验证。
视图通常使用MERGE
将视图的查询与调用它的查询合并的方法。视图的另一种方法是TEMP TABLE
在需要时创建一个临时表,但这不太常见。
使用该MERGE
方法的视图的基本示例:
查看查询:
SELECT t1.col1, t2.col2, t2.col3 FROM t1 JOIN t2 USING(id) WHERE x = 1
来电查询:
SELECT col1, col3 FROM view WHERE y = 2
MySQL 基本上将这个查询执行为:
SELECT col1, col3 FROM (SELECT t1.col1, t2.col2, t2.col3 FROM t1 JOIN t2 USING(id) WHERE x = 1) WHERE y = 2
但是,由于查询被合并和优化,它将被优化为更简单的形式,如下所示:
SELECT col1, col3 FROM t1 JOIN t2 USING(id) WHERE x = 1 AND y = 2