2-Feld-Schlüssel effizient nutzen

Hallo,

in einer Tabelle habe ich einen Schlüssel, der über zwei Felder geht.
Nun möchte ich Datensätze mit diesen Werten abfragen:
id1 id2
1 3
1 4
1 7
3 2
3 3
Ich würde es so machen:
SELECT … WHERE
id1=1 AND id2 IN (3,4,7) OR
id1=3 AND id2 IN (2,3);

Ist das der schnellste Weg?

Danke

Ajo

Moin, Ajo,

bei dieser Datenkonstellation würde es genügen, auf id1=1 or id1=3 abzufragen. Klappt natürlich nur, solange sich die Daten nicht ändern.

Mal abgesehen davon, dass Primärschlüssel immer einteilig sein sollten: Das ist nicht das Problem, das liegt vielmehr darin, das die Ids nicht taugen. Eine Relation sollte sich durch ihre Eigenschaften zu erkennen geben, nicht durch ihre Schlüsselwerte, auf dass der schöne Satz „Ein guter Hirte erkennt seine Ferkels am Gang“ auch in der Datenbank wahr werde.

Schau mal, ob sich da keine besseren Suchbegriffe finden lassen - anders gesagt, was die Sätze sachlich voneinander unterscheidet.

Ist das der schnellste Weg?

Vermutlich, weil id1 und id2 zwangsläufig indiziert sind. Der Ärger fängt an, wenn der Schlüssel vererbt wird und irgendwann Joins aufgebaut werden müssen.

Gruß Ralf