Frage

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`

Tabelle 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    |

Tabelle 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      |  

Ich habe 1 Index auf compname version in archdetails und 4 Indizes auf svn3 auf revno; revno, comp, compname; comp, compname; und name, revno, comp, compname.

Die Indizes für compname ist mit einer Länge von 100.

Die Abfrage dauert noch 0.16 sec auszuführen, die für meine Zwecke sehr teuer ist. Ich habe nicht viel Erfahrung mit Indizes und den oben genannten Indizes haben mit Variablen am häufigsten verwendet, erstellt. Bitte raten, wie man über Indizes gehen.

War es hilfreich?

Lösung

Eine schnelle Antwort. Felder einschließen, die in der where-Klausel

In Ihrem Fall sollten Sie die Indizierung svn3.revno und archdetails.version. Dann schauen Sie sich die Spalten in Ihrem verbinden. Index archdetails.compname ist eine gute Wahl, auch.

Natürlich wollen Sie nicht zu viele Indizes hinzuzufügen. Sie machen Ihre Einfügungen und Löschungen langsamer, und machen Sie Ihre DB mehr Platz in Anspruch nehmen.

Andere Tipps

Versuchen Sie diese

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'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top