SQL: COUNT ET Group BY sous Sql Server

Résolu/Fermé
Signaler
-
 NewbSqlServer -
Bonjour,
Je suis novice total en Sql Server et j'ai une requête que je n'arrive pas à faire:

SELECT COUNT(cs_service_id), cs_service_id
FROM sessions_informations, consulted_services
WHERE si_start_date >= '2008-05-03 13:40:07' AND si_end_date < '2008-07-12 19:36:07' AND si_called_number='1234' AND sessions_informations.si_session = consulted_services.cs_session GROUP BY cs_service_id

Celle ci marche et me donne bien la somme en groupant par service.
Le problème arrive quand je veux avoir le nom de chaque service qui se trouve dans une troisième table:

SELECT COUNT(cs_service_id), cs_service_id, srv_service_name
FROM sessions_informations, consulted_services, services
WHERE si_start_date >= '2008-05-03 13:40:07' AND si_end_date < '2008-07-12 19:36:07' AND si_called_number='1234' AND sessions_informations.si_session = consulted_services.cs_session AND srv_service_id = cs_service_id GROUP BY cs_service_id, srv_service_name

Là il mouline pendant je ne sais combien de temps.. Ce qui me parait bizzare c'est que j'ai une requête utilisant ces trois même tables où je ne fais pas de COUNT et qui marche très bien en donnant bien le nom de chaque service.

Avez vous une idée ?
Merci d'avance

2 réponses

Messages postés
583
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008
159
Salut,

Tout dépends du temps que ça prend mais c'est bien possible car sans le count il peut lire un record et l'afficher mais avec le count il doit lire tout les records, les compter, afficher le résultat et ensuite passer à un autre couple, etc...
0

ok.. Donc à priori je n'ai pas moyen de plus optimiser ma requête ?
Parce que si je ne veux pas afficher le nom du service ( uniquement deux tables) bah j'ai un gain de temps considérable mais je dois malheureusement afficher le nom du service donc 3e table.. et la différence de temps est conséquente mais bon ca prend, je dirais 3-4 secondes, mais pour l'instant il n'y a pas un nombre très grand de données..
0

Bon j'ai essayé en faisant une sous requête:

SELECT cs_service_id, srv_service_name
FROM consulted_services, services,
WHERE cs_session IN ( SELECT si_session From sessions_informations WHERE si_start_date >= '2008-05-03 13:40:07' AND si_end_date < '2008-07-12 19:36:07' AND si_called_number='1234') AND srv_service_id = cs_service_id GROUP BY cs_service_id, srv_service_name

J'ai remarqué que sans faire le COUNT et en enlevant le group By, la requête s'executaitt de facon quasi instantannée !!

Et c'est en rajoutant uniquement le GROUP BY ( sans le Count) que la requête met 11 secondes !!!
Quelqu'un pourrait m'expliquer pourquoi ce Group By met autant de temps à s'executer ?? Sachant que sans le group By on remarque qu'il y a uniquement 2 cs_service_id différent !! et seulement 12 lignes de resultats !!

Je désespère..

Merci d'avance pour votre aide
0