Hallo!
ich verzweifle gerade an einer eigentlich recht simplen Query auf einer Tabelle. Das Problem bei der Query ist, das diese die komplette Tabelle (die leider sehr groß werden kann) durchsucht und ich keinen Weg finde, dies zu vermeiden.
Der relevante Ausschnitt aus der Query ist folgender:
Die Tabelle sieht folgendermaßen aus:
Trotz (verwendeter) Indizes muss die Query die ganze Tabelle durchsuchen ( explain select sagt mir, dass etwa so viele Datensätze durchsucht werden, wie vorhanden).
Lässt sich diese Query auch irgendwie ohne ein subselect schreiben? Gibt es noch einen besseren Index? Oder lässt sich diese Query tatsächlich nicht optimieren?
Für jede Hilfe wäre ich sehr dankbar!
Grüße, Basti
ich verzweifle gerade an einer eigentlich recht simplen Query auf einer Tabelle. Das Problem bei der Query ist, das diese die komplette Tabelle (die leider sehr groß werden kann) durchsucht und ich keinen Weg finde, dies zu vermeiden.
Der relevante Ausschnitt aus der Query ist folgender:
SQL:
SELECT FK_tag
FROM reference
WHERE FK_object in
(SELECT fk_object
FROM reference
WHERE fk_tag = ?)
Die Tabelle sieht folgendermaßen aus:
SQL:
create table Reference (
PK_id integer not null auto_increment,
fk_tag integer not null,
fk_object integer not null,
userId varchar(50) not null,
version timestamp not null,
constraint C_PK_Reference primary key (PK_id),
constraint c_t_o_u unique (userId, fk_object, fk_tag),
constraint c_fk_tag foreign key (fk_tag) references tag(pk_id),
constraint c_fk_object foreign key (fk_object) references object(pk_id),
index i_object_tag (fk_object, fk_tag)
) engine = innodb;
Trotz (verwendeter) Indizes muss die Query die ganze Tabelle durchsuchen ( explain select sagt mir, dass etwa so viele Datensätze durchsucht werden, wie vorhanden).
Lässt sich diese Query auch irgendwie ohne ein subselect schreiben? Gibt es noch einen besseren Index? Oder lässt sich diese Query tatsächlich nicht optimieren?
Für jede Hilfe wäre ich sehr dankbar!
Grüße, Basti
Zuletzt bearbeitet von einem Moderator: