2016-04-25 17 views
3

Ich poste diesen Thread, um einige Ratschläge bezüglich der Leistung meiner SQL-Abfrage zu erhalten. Ich habe eigentlich 2 Tabellen, eine, die HGVS_SNP mit etwa 44657169 Zeilen und eine andere auf run Tabelle, die einen Durchschnitt von 2000 Zeilen hat aufgerufen. Wenn ich versuche, Feld Kommentar meiner run table zu aktualisieren, dauert es viel Zeit, die Abfrage durchzuführen. Ich habe mich gefragt, ob es irgendeine Methode gibt, um meine SQL-Abfrage zu erhöhen.Verbessern Sie die Abfrageleistung in MySQL

Struktur der HGVS_SNP Tabelle:

+-----------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+-------------+------+-----+---------+-------+ 
| snp_id | int(11)  | YES | MUL | NULL |  | 
| hgvs_name | text  | YES |  | NULL |  | 
| source | varchar(8) | NO |  | NULL |  | 
| upd_time | varchar(32) | NO |  | NULL |  | 
+-----------+-------------+------+-----+---------+-------+ 

Meine Lauftabelle hat die folgende Struktur:

+----------------------+--------------+------+-----+---------+-------+ 
| Field    | Type   | Null | Key | Default | Extra | 
+----------------------+--------------+------+-----+---------+-------+ 
| ID     | varchar(7) | YES |  | NULL |  | 
| Reference   | varchar(7) | YES | MUL | NULL |  | 
| HGVSvar2    | varchar(120) | YES | MUL | NULL |  | 
| Comment    | varchar(120) | YES |  | NULL |  | 
| Compute    | varchar(20) | YES |  | NULL |  | 
+----------------------+--------------+------+-----+---------+-------+ 

Hier ist meine Frage:

UPDATE run 
INNER JOIN SNP_HGVS 
ON run.HGVSvar2=SNP_HGVS.hgvs_name 
SET run.Comment=concat('rs',SNP_HGVS.snp_id) WHERE run.Compute not like 'tron' 
+1

Der obviuos verdächtigen ist, dass die Felder, denen Sie beitreten, sich unterscheiden t types und 'hgvs_name' scheint keinen Index zu haben. –

+0

dieses 'nicht mögen' ist nicht glücklich, und wie ich sehe, gibt es keinen Index auf' Compute' Feld – vaso123

+0

addieren Sie Index auf 'berechnen' Spalte und vermeiden 'LIKE' wenn nicht notwendig ist – mitkosoft

Antwort

3

I`m erraten, da Sie einen JOIN Textspalte mit einer VARCHAR (120) -Spalte, für die Sie keine Textspalte benötigen. Machen Sie es ein VARCHAR so können Sie indizieren

ALTER TABLE `HGVS_SNP` modify hgvs_name VARCHAR(120); 

ALTER TABLE `HGVS_SNP` ADD KEY idx_hgvs_name (hgvs_name); 

Dieses eine Weile auf großen Tischen nehmen

Ihr nun JOIN sollte viel schneller sein, fügen Sie auch einen Index für Compute-Spalte

ALTER TABLE `run` ADD KEY idx_compute (compute); 

Und das LIKE ist unnötig, ändern Sie es in

WHERE run.Compute != 'tron' 
+1

Danke an alle für Ihre Antworten :). @Mihai, danke, deine Lösung passt zu mir. – user979974

Verwandte Themen