Fusionner 2 requêtes en une (MySQL 3.23 only ...) [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 09-01-2003 à 18:01:45
Core 666 a écrit : Soit les deux requêtes suivantes : |
Ca gère pas les UNION MySQL ?
En Oracle, tu pourrais faire ça :
SELECT * FROM tables 1 WHERE champ1 = $i AND champ2 = 1
UNION
SELECT * FROM tables 1 WHERE champ3 = 1;
Je sais pas si c'est possible avec MySQL ...
Marsh Posté le 10-01-2003 à 08:26:50
Voir la fin de mon premier message => UNION n'est supporté qu'à partir de MySQL 4
Marsh Posté le 10-01-2003 à 10:52:43
Core 666 a écrit : Voir la fin de mon premier message => UNION n'est supporté qu'à partir de MySQL 4 |
Ah, j'avias pas vu ...
Désolé ...
Marsh Posté le 12-01-2003 à 05:36:09
malheureusement y a pas bcp d'alternative, à part en passant par une temporary table de type heap
Marsh Posté le 07-01-2003 à 19:01:26
Soit les deux requêtes suivantes :
SELECT * FROM tables 1 WHERE champ1 = $i AND champ2 = 1;
SELECT * FROM tables 1 WHERE champ3 = 1;
Il y a un index compound sur champ1/champ2, et un deuxième index sur champ3. Chaque requête prend un petit centième de seconde, c'est nickel. Mais pour des raisons pratiques je voudrais fusionner ces deux requêtes en une seule, sans perdre en performance évidement. J'ai essayé :
SELECT * FROM tables 1 WHERE (champ1 = $i AND champ2 = 1) OR champ3 = 1;
Mais c'est catastrophique niveau temps d'exécution. Un EXPLAIN montre que MySQL n'utilise même pas un seul index. En forcant l'utilisation d'un des deux index par USE INDEX() c'est un peu mieux, mais ca reste très loin du temps d'exécution cumulé des 2 requêtes séparées. La solution serait bien évidement d'utiliser UNION, mais je tourne sous MySQL 3.23 et dans un soucis de portabilité ces requêtes doivent rester compatibles avec les versions antérieures à la 4.0.0. Une idée ?