我有一个观点:vcompanyendofday
以下查询仅在0.7秒内执行
Select * from vcompanyendofday
但是这个查询的简单条件大约需要200.0秒
select * from vcompanyendofday where companyid <= 51;
这是视图定义:
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`)))
where (`e`.`eoddate` =
(
select max(`e2`.`eoddate`) AS `max(eoddate)`
from `endofday` `e2`
where (`e2`.`companyid` = `c`.`companyid`)
)
);
答案 0 :(得分:1)
您似乎没有endofday.companyid
添加条件时,company
会在联接中成为领先者,并会杀死所有效果。
在endofday.companyid
上创建索引:
CREATE INDEX ix_endofday_companyid ON endofday(companyid)
顺便说一句,如果您希望返回所有公司,则需要将子查询放入ON
的{{1}}子句中,否则您遗失的OUTER JOIN
将是过滤掉了:
endofday
答案 1 :(得分:0)
您是否尝试过使用WHERE子句自行创建视图的选择以查看会发生什么?
如果问题发生,请在该查询上运行EXPLAIN
以查看发生了什么。
据猜测,其中一个表中没有关于companyid的索引,很可能是在当天。