У меня есть некоторые представления MySQL, которые определяют количество дополнительных столбцов на основе некоторых относительно простых подзапросов. База данных также многонаселена, поэтому каждая строка имеет идентификатор компании.Летитете оценку MySQL
Проблема, которую я имею, это мои взгляды оцениваются для каждой строки, прежде чем фильтроваться идентификатором компании, что дает огромные проблемы с производительностью. Есть ли способ лениво оценить представление, поэтому предложение «где» во внешнем запросе применяется к подзапросам в представлении. Или есть нечто похожее на представления, которые я могу использовать для добавления дополнительных полей. Я хочу рассчитать их в SQL, чтобы вычисленные поля могли использоваться для фильтрации/поиска/сортировки/разбивки на страницы.
Я ознакомился с документами MySQL, которые объясняют доступные алгоритмы, и я знаю, что представления не могут быть реализованы как «слияние», поскольку они содержат подзапросы.
вид
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' из основного объема запроса. Я не могу жестко скопировать идентификатор компании в представление, так как я хочу, чтобы представление было пригодно для использования для любого идентификатора компании.