我的问题涉及查询 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 个条目)
idint(11) NOT NULL AUTO_INCREMENT,idmembreint(11) 非空,libellevarchar(128) 非空,idformationint(11) 非空,datedebut日期不为空,datefindate NOT NULL DEFAULT '0000-00-00',descript文本不为空,- 键
id(id), - 键
idmembre(idmembre), - 键
idformation(idformation)
成员(500 个条目)
idint(3) NOT NULL AUTO_INCREMENT,nomvarchar(255) 非空,prenomvarchar(255) 非空,villevarchar(255) 非空,emailvarchar(255) 非空,maj日期时间不为空,roletinyint(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
我愿意接受任何建议,因为我有点卡住了
谢谢你