私の質問は、クエリ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エントリ)
id
int(11)NOT NULL AUTO_INCREMENT、idmembre
int(11)NOT NULL、libelle
varchar(128)NOT NULL、idformation
int(11)NOT NULL、datedebut
日付はNULLではありません、datefin
日付NOTNULLDEFAULT '0000-00-00'、descript
テキストNOTNULL、- キー
id
(id
)、 - キー
idmembre
(idmembre
)、 - キー
idformation
(idformation
)
membres(500エントリ)
id
int(3)NOT NULL AUTO_INCREMENT、nom
varchar(255)NOT NULL、prenom
varchar(255)NOT NULL、ville
varchar(255)NOT NULL、email
varchar(255)NOT NULL、maj
日時NOTNULL、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
私は少し立ち往生しているので、私はどんな提案にもオープンです
ありがとうございました