Optimisation de requetes SQL UNION
Bonjour,
j'ai écrit une requête qui vise à remonter les dernières de quelques tables SQL
différentes. j'utilise pour cela une union. Les tables TableA et TableB
contiennent quelques centaines de milliers de lignes. Elles sont alimentés en
permanence.
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 28 29 30 31 32 33 34 35 36
|
SELECT
type,
id,
date,
name
FROM
(
SELECT
1 AS type,
TableA.id AS id,
TableA.last_update AS date,
TableA.element1 AS name
FROM
TableA
UNION
SELECT
2 AS type,
TableB.id AS id,
TableB.last_update AS date,
TableB.element2 AS name
FROM
TableB
) AS result_set
ORDER BY
date DESC
LIMIT
0,40 |
J'ai peur que MySQL cré une liste intermédiaire contenant la somme des entrées
de mes deux tables avant de pouvoir les trier et extraire les 40 premières
lignes. Je ne peux pas valider ce que j'avance car ma base de tests ne contient
pas autant de lignes.
Ce mode de fonctionnement m'inquiète. Je souhaiterai faire une requête dans
l'esprit de celle qui suit, mais l'interpréteur SQL la refuse.
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
SELECT
type,
id,
date,
name
FROM
(
SELECT
1 AS type,
TableA.id AS id,
TableA.last_update AS date,
TableA.element1 AS name
FROM
TableA
ORDER BY
TableA.last_update DESC
LIMIT
0, 40
UNION
SELECT
2 AS type,
TableB.id AS id,
TableB.last_update AS date,
TableB.element2 AS name
FROM
TableB
ORDER BY
TableB.last_update DESC
LIMIT
0, 40
) AS result_set_2
ORDER BY
date DESC
LIMIT
0, 40 |
Mon problème est peut être un cas typique SQL. Quelqu'un aurait une solution
ou une best practice pour ce type de requêtes ?
Merci d'avance.