我试图通过PHPmyAdmin从SQL DB中获取数据,但是执行查询需要很长时间。你知道如何加快我的查询速度吗?
我的数据库具有以下结构
表joueurs
| id_joueur |邮件 |
表格配对
| paires.annee | idj1 | idj2 |
非常感谢
/* mail from all players being first memeber of a pair (idj1)
in 2015, 2016 and 2017 and removing doubles*/
SELECT
mail
from
joueurs
where
(joueurs.id_joueur in
(SELECT idj1
FROM paires
WHERE (paires.annee = 2015 OR paires.annee = 2016 OR paires.annee = 2017)
)
)
GROUP BY mail
HAVING COUNT(*) > 0
答案 0 :(得分:1)
我会删除子查询,只删除join
两个表。 where
条件也可能更好,条件如paires.annee > 2014 and paires.annee < 2018
。
但改进它的唯一方法是在表格中添加索引。
SELECT
j.mail
FROM
joueurs j
JOIN paires p on p.idj1 = j.id_joueur
WHERE p.annee > 2014 and p.annee < 2018
GROUP BY j.mail
HAVING COUNT(*) > 0
答案 1 :(得分:0)
您可以使用Exists
代替in
SELECT
j.mail
from
joueurs j
where
Exists
(SELECT idj1
FROM paires
WHERE idj1 =j.id_joueur and (paires.annee = 2015 OR paires.annee = 2016 OR paires.annee = 2017 )
)
GROUP BY j.mail
HAVING COUNT(*) > 0
修改强>:
SQL Server IN vs. EXISTS Performance您可以在此处了解Exists
和IN
答案 2 :(得分:0)
我最初的建议是:
select distinct j.mail
from joueurs j
where exists (select 1
from paires p
where p.idj1 = j.id_joueur and p.annee in (2015, 2016, 2017)
);
having
子句什么都不做。为了提高性能,您需要paires(idj1, annee)
上的索引。
如果这仍然需要很长时间,如果您删除distinct
会怎样?结果仍然可以接受吗?