我的问题涉及查询 sql 的优化。
我的查询检索成员列表及其上一次培训。
为了获得最新的培训,我对返回所有成员的完整培训列表的查询结果进行了联接。
此查询有效,但速度很慢,如果有人能提供更快执行的解决方案,我真的很感兴趣。
我的查询(大约 16 秒):
SELECT
m.nom,
m.prenom,
m.ville,
m.maj,
mbf.libelle,
mbf.datefin,
m.id as idmb
FROM
membres m
LEFT JOIN (
select *
from membreform
where idformation = 1
order by datefin DESC
) as mbf ON mbf.idmembre = m.id
WHERE
role > 0 AND visible = 1
group by m.id
ORDER BY m.maj DESC
limit 0 , 20
我的数据结构:
成员表单(1000 个条目)
id
int(11) NOT NULL AUTO_INCREMENT,idmembre
int(11) 非空,libelle
varchar(128) 非空,idformation
int(11) 非空,datedebut
日期不为空,datefin
date NOT NULL DEFAULT '0000-00-00',descript
文本不为空,- 键
id
(id
), - 键
idmembre
(idmembre
), - 键
idformation
(idformation
)
成员(500 个条目)
id
int(3) NOT NULL AUTO_INCREMENT,nom
varchar(255) 非空,prenom
varchar(255) 非空,ville
varchar(255) 非空,email
varchar(255) 非空,maj
日期时间不为空,role
tinyint(4) NOT NULL DEFAULT '1',- 主键 (
id
), - 键
role
(role
), - 键
maj
(maj
)
我以另一种方式进行了测试(大约 0.40 秒),但我觉得不是很干净
SELECT
m.nom,
m.prenom,
m.ville,
m.maj,
m.id as idmb,
(select
libelle
from
membreform
where
idformation = 1
AND m.id = membreform.idmembre
order by datefin DESC
limit 1
) libelle,
(select
datefin
from
membreform
where
idformation = 1
AND m.id = membreform.idmembre
order by datefin DESC
limit 1
) datefin
FROM
membres m
WHERE
role > 0 AND visible = 1
group by m.id
ORDER BY m.maj DESC
limit 0 , 20
我愿意接受任何建议,因为我有点卡住了
谢谢你