Ceci est une extension du concept de table « double » (table temporaire créée à la volée pour une requête et mis au rebut immédiatement après)ligne multi-tables « double » dans une base MySQL/SQL
Je suis en train de se joindre à un multi row dual
table avec une autre, afin d'éviter d'avoir à exécuter la même requête plusieurs fois avec des paramètres différents, en utilisant 1 instruction. L'un des problèmes que je rencontre est que l'union est très lente pour les tables doubles, et je ne connais pas de méthode plus efficace pour accomplir ce qui suit. (100 ms en joignant 50 dual ensemble)
SELECT
b.id,
b.ref_unid,
a.date
FROM
(
SELECT
'b8518a84-c501-11dd-b0b6-001d7dc91168' as unid,
'2010-01-05' as date
UNION
SELECT
'b853a1f2-c501-11dd-b0b6-001d7dc91168',
'2010-01-06'
UNION
SELECT
'b8557bd0-c501-11dd-b0b6-001d7dc91168',
'2010-01-07'
/* ... */
) as a
join other_table b
ON
b.ref_unid = a.unid
Existe-t-il une autre façon d'atteindre cet objectif?
Y at-il une syntaxe similaire à celle d'insérer dans la déclaration des valeurs qui permettrait d'atteindre cet objectif, comme:
SELECT
unid,
id
FROM
(
WITH (unid, date) USING VALUES
(
('b8518a84-c501-11dd-b0b6-001d7dc91168','2010-01-05'),
('b853a1f2-c501-11dd-b0b6-001d7dc91168','2010-01-06'),
('b8557bd0-c501-11dd-b0b6-001d7dc91168','2010-01-07'),
/* ... */
)
) as a
join other_table b
ON
b.ref_unid = a.unid
Je suis à la recherche d'une solution 1-déclaration. Plusieurs trajets vers la base de données ne sont pas possibles.
L'API que je code permet de passer une liste de tuples et retourne une liste d'objets pour chacun de ces tuples. Étant donné que le nombre de tuples transmis est généralement compris entre 10 et 50, j'essaie d'éviter d'appeler une requête 50 fois, en changeant simplement quelques paramètres. J'ai essayé d'utiliser l'instruction multiple IN, mais elle n'utilise aucun des index existants, contrairement à l'approche ci-dessus qui est très rapide en dehors de l'union de tables doubles. –