我試圖找出更多關於MySQL視圖的,我還是很困惑(特別是關於細節)與WHERE
如果我得到它的正確的功能視圖的中,視圖是nothng不止一個存儲的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的用戶的角色/狀態 - 所以我必須做對VIEW
附加SELECT
,與WHERE id = 3
,對不對?但是如果我這樣做,到底會發生什麼?
請問VIEW
還是SELECT
的所有用戶,然後整個數據都會掉線,只有id = 3
會顯示?或者它會被優化,以便VIEW
只選擇user.id = 3
?
我感到困惑的這一性能方面 - 因爲如果我有100萬個用戶,使用這個VIEW
將是一個相當糟糕的主意。但另一方面,如果我有這個VIEW
,我每次都會用自己的整個SELECT
以及所有的JOIN
。
那麼究竟怎樣的VIEW
行爲?作爲簡單的SUBQUERY,還是更加優化,如果您在選擇VIEW
時添加WHERE
?
我猜如果它的行爲像一個子查詢,一個STORED PROCEDURE
參數總是會比VIEW
好,那麼(如果你有WHERE
參數不同)?
感謝您的信息
非常感謝,我希望它會是這樣的! – Katai