SQL: COUNT ET Group BY sous Sql Server

Résolu/Fermé
NewbSqlServer - 10 juil. 2008 à 12:59
 NewbSqlServer - 11 juil. 2008 à 13:59
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
A voir également:

2 réponses

BlueMind Messages postés 583 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 159
10 juil. 2008 à 14:12
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
NewbSqlServer
10 juil. 2008 à 15:02
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
NewbSqlServer
11 juil. 2008 à 13:59
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