私は現在、いくつかの最適化が必要なWebサイトで作業しています...フロントページには約15-20秒かかるので、いくつかの最適化がうまくいくと思いました。ここでMySQLクエリの最適化
はMySQLのスロークエリログに現れた1つのクエリです:(〜207Kライン - 電子メールとプロファイルが含まれています)profil_perso
で
SELECT a.user,a.id
FROM `profil_perso` pp
INNER JOIN `acces` a ON pp.parrain = a.id
INNER JOIN `acces` ap ON ap.id = pp.id
WHERE pp.parrain_visibilite = '1'
AND a.actif = 1
GROUP BY a.id
ORDER BY ap.depuis DESC LIMIT 15;
主キーでperso_id
があり、また、そこにあるid
(外部キー)+ parrain
(リファラー)+ parrain_visibilite
(リファラーが示されています)がインデックスです。 acces
で
主キーでid
があり、また
にベンチマークをインデックス化された(登録日)がdepuisされ、実際にこれを示しています
初回:1.94532990456
最終時間:1.94532990456を
平均時間:0.0389438009262
私はこのようにそれを入れてみました:
それでもSELECT DISTINCT a.id, a.user
FROM `profil_perso` pp
LEFT JOIN `acces` a ON pp.parrain = a.id
WHERE pp.parrain_visibilite = 1
AND a.actif = 1
AND pp.id != 0
ORDER BY pp.id DESC LIMIT 15;
ベンチマークショーこの:
初回:1.96376991272
最終時間:1.96376991272
平均時間:0.0393264245987
クエリ時間を下げるためにどれヒント?
ここで完全なインデックスです:
ACCES:
id (primary)
derniere_visite -- last visit
pays_id -- country_id
depuis -- registration time
perso_id -- foreign key to profil_perso primary key
actif -- account status
compte_premium -- if account is premium
profil_perso:
perso_id (primary)
id -- foreign key to acces primary key
genre -- gender
parrain_visibilite -- visibility of referer
parrain -- referer
parrain_contexte
telephone
orientation
naissance -- birthdate
photo -- if it has a picture
完全なインデックスを3つのテーブルに投稿してください。それは私の最高の推測ですが、私はそれらを確認する必要があるでしょう。 – MBCook
これらはすべてacces.id、acces.ap acces.parrainのインデックスに登録されていますか? – THEn
出力を希望するものを説明できる場合にも役立ちます – Greg