Ben temelde spor var kullanıcıları bulmak için buraya çalışıyorum & am Bir etkinlik tarafından hedef bölgelerde. Acces [kullanıcı] masanın etrafında 17K kullanıcıları var. Her spor ilgi ve bir bölgenin belli bir sayıda olabilir.
Bir spor ve sahip olduğunuz her kullanıcılar için bakmak Orada burada sorgulamak faaliyetleri ile hedeflenen en az bir bölge. Biz [bir IN sorgu ile oldukça iyi değil] em her seçtiğinizde Sports kadar 75 olabilir.
SELECT a.user, pp.courriel
FROM acces a
LEFT JOIN acces_profil_sport ap ON ap.id = a.id
LEFT JOIN profil_perso pp ON pp.id = a.id
WHERE ap.sport_id IN
(
SELECT ac.sport_id
FROM activite_sport ac
RIGHT JOIN activite a ON a.activite_id = ac.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
)
AND pp.region_id IN
(
SELECT ar.region_id
FROM activite_region ar
RIGHT JOIN activite a ON a.activite_id = ar.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
)
GROUP BY a.id
Ben spor arama kaldırırsanız, sorgu çalıştırmak için arounds 30 saniye sürer. Aksi takdirde oldukça sonsuza kadar sürer ve mysql ile proc yaklaşık% 99 kullanabilirsiniz.
Bu yardım Herhangi bir ipucu?
[edit : Table structure]
Acces : id (primary key), user, perso_
id (Key/Foreign key to profil_
perso[perso_
id]) [some-other-fields]
profil_
perso : perso_
id (primary key) courriel, region_
id, id (foreign key to acces[id]) [some other fields]
acces_
profil_
sport : id/sport_
id (dual primary key), niveau_
id (dual key with sport_
id)