Les colonnes à l'index à faire cette requête plus rapide?
-
28-09-2019 - |
Question
SELECT t.compname, min(t2.version) FROM archdetails t
INNER JOIN svn3 b ON t.compname = b.compname
INNER JOIN archdetails t2 ON t.compname = t2.compname
WHERE ((b.revno = '270294' OR b.revno = 'r275869' OR b.revno = 'r393316'))
AND t.version = '1.6'
GROUP BY t.compname`
Tableau archdetails
:
Field | Type | Null | Key | Default | Extra
-------------------------+--------------+------+-----+---------+-------
name | varchar(15) | NO | | NULL |
compname | varchar(500) | NO | MUL | NULL |
sno | int(11) | NO | | NULL |
count | int(11) | NO | | NULL |
fdindex | int(11) | NO | | NULL |
version | varchar(10) | NO | | NULL |
sdate | date | NO | | NULL |
edate | date | NO | | NULL |
inFlat | int(11) | NO | | NULL |
inStar | int(11) | NO | | NULL |
inNostar | int(11) | NO | | NULL |
inReducedStar | int(11) | NO | | NULL |
Tableau svn3
:
Field | Type | Null | Key | Default | Extra
---------+---------------+------+-----+---------+------
name | varchar(20) | NO | MUL | NULL |
revno | varchar(10) | NO | MUL | NULL |
comp | varchar(1000) | NO | MUL | NULL |
compname | varchar(1000) | NO | | NA |
Je index 1
sur compname version
des indices archdetails
et 4
sur svn3
sur revno
; revno, comp, compname
; comp, compname
; et name, revno, comp, compname
.
Les index sur compname est de longueur 100.
La requête prend toujours 0.16 sec
pour exécuter ce qui est très cher pour mon but. Je n'ai pas beaucoup d'expérience avec des indices et les indices ci-dessus ont été créés avec des variables les plus souvent utilisées. S'il vous plaît des conseils sur la façon d'aller sur les index.
La solution
Une réponse rapide. Inclure les champs qui sont dans votre clause where
Dans votre cas, pensez à l'indexation svn3.revno et archdetails.version. Ensuite, regardez les colonnes de jointure. Index archdetails.compname est à considérer aussi.
Bien sûr, vous ne voulez pas ajouter trop d'index. Ils font vos insertions et suppressions plus lentes, et de rendre votre DB prendre plus d'espace.
Autres conseils
Essayer cette
SELECT DISTINCT
t.compname,
t.version
FROM archdetails t
INNER JOIN svn3 b
ON t.compname
= b.compname
WHERE b.revno in ('270294','r275869','r393316')
AND t.version = '1.6'