Optimiser une recherche dans un dictionnaire clés/valeurs
:salut:
Prenons pour exemple ces deux tables
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CREATE TABLE Main (
pk1 integer,
pk2 bigint,
n varchar,
CONSTRAINT main_pk PRIMARY KEY (pk1,pk2)
);
CREATE TABLE Arguments (
pk1 integer,
pk2 bigint,
k varchar,
v varchar,
CONSTRAINT arguments_pk PRIMARY KEY (pk1,pk2,k),
CONSTRAINT arguments_fk FOREIGN KEY (pk1,pk2) REFERENCES Main(pk1,pk2)
); |
Je dois trouver toutes les lignes ayant différentes combinaisons clés/valeurs
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
SELECT pk1,pk2 FROM Main m WHERE
n IN ('n1','n2')
AND (
(
EXISTS (
SELECT 1 FROM Arguments a WHERE
a.pk1=m.pk1 AND a.pk2=m.pk2 AND
k='k1' AND v ~* 'v1'
)
AND
EXISTS (
SELECT 1 FROM Arguments a WHERE
a.pk1=m.pk1 AND a.pk2=m.pk2 AND
k='k2' AND v ~* 'v2'
)
)
OR
(
EXISTS (
SELECT 1 FROM Arguments a WHERE
a.pk1=m.pk1 AND a.pk2=m.pk2 AND
k='k3' AND v ~* 'v3'
)
)
)
; |
Voyez-vous une méthode plus optimisée pour faire cela ?
:merci: