我正在尝试了解有关 MySQL VIEW 的更多信息,但我仍然很困惑(尤其是关于细节)
如果我做对了,视图只不过是使用的存储的 SELECT 查询。但是当我想在 VIEW 中为 WHERE 子句使用某些值时,我的问题就开始了。
让我们假设,我们有这个视图:
SELECT `user`.`id`, `userrole`.`key` AS `role`, `userstatus`.`key` AS `status`
FROM `user`
LEFT JOIN `userrole`
ON `userrole`.`id` = `user`.`userrole_id`
LEFT JOIN `userstatus`
ON `userstatus`.`id` = `user`.`userstatus_id`
现在,这将提供所有用户的列表,以及他们当前的角色/状态
+----+-------+--------+
| id | role | status |
+----+-------+--------+
| 1 | admin | active |
| 2 | user | active |
| 3 | user | active |
| 4 | admin | active |
| .. | ... | ... |
+----+-------+--------+
现在,我只想知道用户的角色/状态ID
3 - 所以我必须在 , with 上做一个额外SELECT
的VIEW
事情WHERE id = 3
,对吧?但如果我这样做,究竟会发生什么?
VIEW
还是SELECT
所有用户,然后整个数据都会被丢弃,只显示id = 3
?还是会对其进行优化,以便VIEW
唯一选择user.id = 3
?
我对此的性能方面感到困惑 - 因为如果我有 100 万用户,那么使用 aVIEW
将是一个相当糟糕的主意。但另一方面,如果我有这个,我会保存自己每次都使用SELECT
带有所有's 的整体。JOIN
VIEW
那么具体是怎么做的VIEW
呢?作为简单的 SUBQUERY,还是WHERE
在选择 a 时添加 a 会更优化VIEW
?
我想如果它像一个 SUBQUERY,STORED PROCEDURE
带参数的 a 总是比 a 好VIEW
,那么(如果你有WHERE
不同的参数)?
感谢您的信息