Pb requete SQL

stef -  
 stef -
bonjour, j'ai une requete du type :

SELECT * FROM table WHERE etat=1 OR etat=2
Cette requette mets ENORMEMENT de temps à s'executer.(10secondes)

Alors que si je fait
SELECT * FROM table WHERE etat=1
SELECT * FROM table WHERE etat=2

chaque requete met 0.1 seconde....

quelqu'un a deja eu ce genre de probleme??

3 réponses

MX
 
ce n'est pas un probleme (selon le SGBD)

sur certains SGBD le OR et lancé tel quel et donc sur 100 enregistrement il en traite 100^100 pour en extraire 4 repondant à la requette

au lieu de 2*100 pour avoir les 4 repondant à la requette ...

ce n'est pas choquant... c'est juste ce qui differencie les SGBD optimisé pour les requettes complexes peu nombreuses et ceux qui sont plustot optimisé pour faire beaucoup de requettes ... ou envore ceux qui sont entre les deux...
0
boulet...
 
oui mais il y a aussi le probleme de la mêmoire pour certains ils copies tout dans la memoire (...* from) puis execute dans la mémoire l'analyse (where ......) donc en cas de faible mémoire par rapport au nombre d'entrée c'est très lent et c'est normal ...

100 entrées de 1000 informations c'est deja 100000 objets à 1ko l'objet ça fait deja 102400000 octets sans compter les traitements l'OS et les applications qui tournent elles aussi dans la memoire...

bref... en dessous de 512Mo avec des requettes même peu complexes faut pas s'etonner de ralentissements....à moins d'avoir une becanne surpuissante qui compense avec des debits d'IO enormes avec la mémoire...

mais je pencherai malgré tous pour un mauvais choix du SGBD par rapport au type de requettes attendu...genre un SGBD optimisé pour le grand nombre de petites requettes et pas pour les requettes complexes ou conditionnelles.

mais dans tous les cas ça fonctionnera c'est juste long...
0
stef
 
ok,

merci
0