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 ?