Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1376 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Fusionner 2 requêtes en une (MySQL 3.23 only ...)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Fusionner 2 requêtes en une (MySQL 3.23 only ...)

n°281399
Core 666
Posté le 07-01-2003 à 19:01:26  profilanswer
 

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 ?

mood
Publicité
Posté le 07-01-2003 à 19:01:26  profilanswer
 

n°282772
tomlameche
Et pourquoi pas ?
Posté le 09-01-2003 à 18:01:45  profilanswer
 

Core 666 a écrit :

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 ?


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 ...


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°283371
Core 666
Posté le 10-01-2003 à 08:26:50  profilanswer
 

Voir la fin de mon premier message => UNION n'est supporté qu'à partir de MySQL 4 :(

n°283415
tomlameche
Et pourquoi pas ?
Posté le 10-01-2003 à 10:52:43  profilanswer
 

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é ... :whistle:


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°284496
joce
Architecte / Développeur principal
"BugHunter"
Posté le 12-01-2003 à 05:36:09  profilanswer
 

malheureusement y a pas bcp d'alternative, à part en passant par une temporary table de type heap


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Fusionner 2 requêtes en une (MySQL 3.23 only ...)

 

Sujets relatifs
logiciel pour "tronçonner" une db mysql ?/n, \n <br> ? Recuperer les sauts de lignes avec MySQL/PHP textarea?
MySQL ramener les X premiers car. d'un record?Next ID utilisé par Mysql
MySQL Pourquoi ma requete elle fonctionne pas?[PHP/MySQL] Suivant AutoIndex
Faire un dump d'une base MySQL depuis une page php[mySQL] Problème de requête avec count(*) [résolu]
[Mysql] Base de donnée "figée" chez free.fr[Mysql] sélectionner 2 fois le meme champs.
Plus de sujets relatifs à : [MySQL] Fusionner 2 requêtes en une (MySQL 3.23 only ...)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR