私の質問は、クエリ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
私のデータ構造:
membreform(1000エントリ)
idint(11)NOT NULL AUTO_INCREMENT、idmembreint(11)NOT NULL、libellevarchar(128)NOT NULL、idformationint(11)NOT NULL、datedebut日付はNULLではありません、datefin日付NOTNULLDEFAULT '0000-00-00'、descriptテキストNOTNULL、- キー
id(id)、 - キー
idmembre(idmembre)、 - キー
idformation(idformation)
membres(500エントリ)
idint(3)NOT NULL AUTO_INCREMENT、nomvarchar(255)NOT NULL、prenomvarchar(255)NOT NULL、villevarchar(255)NOT NULL、emailvarchar(255)NOT NULL、maj日時NOTNULL、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
私は少し立ち往生しているので、私はどんな提案にもオープンです
ありがとうございました