Кажется, у вас нет индекса на endofday.companyid
Когда вы добавляете условие, company
становится ведущим в объединении и убивает всю производительность.
Создать индекс для endofday.companyid
:
CREATE INDEX ix_endofday_companyid ON endofday(companyid)
Кстати, если вы хотите, чтобы все компании были возвращены, вам нужно поместить подзапрос в предложение ON
OUTER JOIN
, иначе пропущенные endofday
будут отфильтрованы:
CREATE VIEW `vcompanyendofday` AS
select `c`.`companyid` AS `companyid`,
`c`.`scripcode` AS `scripcode`,
`e`.`eoddate` AS `eoddate`,
`e`.`prevclose` AS `prevclose`,
`e`.`delqty` AS `delqty`
from (
`company` `c`
left join
`endofday` `e`
on `c`.`companyid` = `e`.`companyid`
AND `e`.`eoddate` =
(
select max(`e2`.`eoddate`) AS `max(eoddate)`
from `endofday` `e2`
where (`e2`.`companyid` = `c`.`companyid`)
)