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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.