我有一些MySQL視圖,它們根據一些相對直接的子查詢定義了許多額外的列。數據庫也是多租戶的,所以每行都有一個公司ID。懶洋洋地評價MySQL視圖
我遇到的問題是我的視圖在被公司ID篩選之前對每一行進行評估,給出了巨大的性能問題。有什麼方法可以懶惰地評估視圖,以便外部查詢中的'where'子句適用於視圖中的子查詢。或者是否有類似於我可以用來添加額外字段的視圖。我想在SQL中計算它們,以便計算字段可用於過濾/搜索/排序/分頁。
我已經看過解釋可用算法的MySQL文檔,並且知道視圖不能作爲'merge'被處理,因爲它們包含子查詢。
視圖
create view companies_view as
select *,
(
select count(id) from company_user where company_user.company_id = companies.id
) as user_count,
(
select count(company_user.user_id)
from company_user join users on company_user.user_id = users.id
where company_user.company_id = companies.id
and users.active = 1
) as active_user_count,
(
select count(company_user.user_id)
from company_user join users on company_user.user_id = users.id
where company_user.company_id = companies.id
and users.active = 0
as inactive_user_count
from companies;
查詢
select * from companies_view where company_id = 123;
我想在視圖中的子查詢到之後施加待評估的 '其中COMPANY_ID = 123' 從主查詢範圍。我無法在視圖中硬編碼公司ID,因爲我希望該視圖可用於任何公司ID。