TabellenschemaOptimierung dieses MySQL Query
Für die beiden Tabellen sind die CREATE-Abfragen unten angegeben:
Tabelle 1: (file_path_key, dir_path_key)
create table Table1(
file_path_key varchar(500),
dir_path_key varchar(500),
primary key(file_path_key))
engine = innodb;
Tabelle2: (file_path_key, HASH_KEY)
create table Table2(
file_path_key varchar(500) not null,
hash_key bigint(20) not null,
foreign key (file_path_key) references Table1(file_path_key) on update cascade on delete cascade)
engine = innodb;
Ziel:
ein file_path Da F und es ist dir_path String D, muss ich alle diese Dateinamen finden, die in mindestens einem Hash haben die Satz von Hashes F, aber haben ihre Verzeichnisnamen nicht als D. Wenn eine Datei F1 mehrere Hashes teilt mit F, dann sollte es so oft wiederholt werden.
Beachten Sie, dass die Spalte file_path_key in Tabelle1 und die Spalte hash_key in Tabelle2 indiziert sind.
In diesem speziellen Fall, Tabelle 1 hat rund 350.000 Einträge und Table2 hat 31.167.119 Einträge, die langsam meine aktuelle Abfrage macht:
create table temp
as select hash_key from Table2
where file_path_key = F;
select s1.file_path_key
from Table1 as s1
join Table2 as s2
on s1.file_path_key join
temp on temp.hash_key = s2.hash_key
where s1.dir_path_key != D
Wie kann ich diese Abfrage beschleunigen?
Ist Ihre Frage "Wie kann ich meine aktuelle Anfrage optimieren?"? Sagen Sie uns auf jeden Fall, was Sie eigentlich lösen wollen. – Bojangles
Ja, JamWaffles, ich möchte es beschleunigen! – user1318956