【发布时间】:2015-11-26 00:29:32
【问题描述】:
我可以在创建视图时缩短执行时间吗?我想优化执行时间,但显然我无法更改表以向其添加索引。
另外,我可以使用 JOIN 重写这个查询吗?
我想优化查询的执行时间。
select
Empcode
, Name
, Department
, in_datetime
, out_datetime
, date_format(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,in_datetime,out_datetime)),'%H:%i:%S') as duration
from (
select
(select Empcode from spmm_employee_info c where logs_spmm.Pin=c.Empcode or logs_spmm.pin=c.Pin) as Empcode, (select Name from spmm_employee_info e where logs_spmm.pin=e.Empcode or logs_spmm.pin=e.Pin) as Name
,(select Department from spmm_employee_info e where logs_spmm.pin=e.Empcode) as Department
, date_time as in_datetime
, (select s.Date_time from logs_spmm as s
where s.Date_time>logs_spmm.Date_time and s.Mode='OUT' and s.Pin=logs_spmm.Pin limit 1) as out_datetime
from logs_spmm
where mode = 'IN'
) as relog
【问题讨论】:
-
假设上面的查询产生了想要的结果,要让它变成一个视图,你只需将它包装在一个
CREATE VIEW语句中,所以我猜这实际上不是你想要的问。 -
实际上,如果我按照您所说的去做,它不会产生任何结果,因为它有子查询。我已经试过了
-
啊哈!所以你真正想做的是把这个查询转换成
JOIN。 (对此感到抱歉;我认为“无子查询”是 MySQL 特有的,我已经忘记了。) -
创建视图和优化执行时间是两件事。你想要哪个,或者你最想要哪个?
-
我想优化执行时间,但显然我无法更改表以在其上添加索引。您认为我们在创建视图时可以缩短执行时间吗?另外,请帮助使用 JOIN 重写查询