Performances SELECT COUNT()

Le
Olivier Berquin
Bonjour tout le monde,

C'est ma première intervention ici.
Je voudrais savoir s'il est plus performant de faire un
SELECT COUNT (commercial) FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'

ou bien un
SELECT commercial FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'


Merci.

Oli.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jogo
Le #21884411
SELECT COUNT (commercial) FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'

ou bien un
SELECT commercial FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'



Normalement, la première version est plus efficace. Mais comme
toujours, cela dépend du sgbd. Avec PostgreSQL 8.1.4 par exemple, le
plan d'exécution sera sensiblement le même pour les deux requêtes. Mais
quoi qu'il en soit, la première solution a de toute façon l'avantage de
limiter la quantité d'information qui passe dans les tuyaux. De plus le
code sera plus simple (pas besoin de compter).

--
Nul ne tombe amoureux involontairement ou par hasard.
- Jean-Luc Marion - Le phénomène érotique -
Olivier Berquin
Le #21884401
Il s'agit d'un serveur MySQL 5.0.
Par contre, je suis un peu étonné...
Pour connaître le nombre d'enregistrements, je dois faire ceci:

$q_opened = "
SELECT COUNT(jo_commercial) FROM Jobs
WHERE jo_commercial = '$li->ut_id' AND jo_actif = '1'";
$result_opened = sql_query ($q_opened);
if ($result_opened <> FALSE)
{
$num_opened = mysql_num_rows($result_opened);
// reste du code
}

Est-ce exact???
Si c'est le cas, c'est la même syntaxe que lorsque je fais un
SELECT jo_commercial FROM Jobs

Non?


Merci.

Oli.
Alain Montfranc
Le #21884391
Olivier Berquin a écrit
Bonjour tout le monde,

C'est ma première intervention ici.
Je voudrais savoir s'il est plus performant de faire un
SELECT COUNT (commercial) FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'

ou bien un
SELECT commercial FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'


Merci.

Oli.



Les deux requetes ne font pas la meme chose : la premiere renvoie le
nombre d'enregistrements , la seconde renvoie les enregistrements... On
ne peut donc pas les comparer.
nobody
Le #21884381
Alain Montfranc a écrit :
Olivier Berquin a écrit
Bonjour tout le monde,

C'est ma première intervention ici.
Je voudrais savoir s'il est plus performant de faire un
SELECT COUNT (commercial) FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'

ou bien un
SELECT commercial FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'


Merci.

Oli.



Les deux requetes ne font pas la meme chose : la premiere renvoie le
nombre d'enregistrements , la seconde renvoie les enregistrements... On
ne peut donc pas les comparer.




Ce groupe est francophone, merci
Olivier Berquin
Le #21884371
Les deux requetes ne font pas la meme chose : la premiere renvoie le
nombre d'enregistrements , la seconde renvoie les enregistrements... On
ne peut donc pas les comparer.



Oui, je suis bien d'accord, mais j'ai écrit cela en rapport avec la
réponse de Jean-Luc.
Extrait:
De plus le code sera plus simple (pas besoin de compter).



Je ne vois pas la différence de code...

Oli.
Jogo
Le #21884361
Sur fr.comp.applications.sgbd, Olivier Berquin disait :

Pour connaître le nombre d'enregistrements, je dois faire ceci:

[snip le code beaucoup trop indenté pour être citable]

Est-ce exact???



Non. Tu dois utiliser quelque chose comme mysql_fetch_row. Mais là
c'est du PHP et on est HC.

--
Lorsque l'on a exclu de l'art le but de moraliser et d'améliorer les
hommes, il ne s'en suit pas encore que l'art doive être absolument
sans fin, sans but et dépourvu de sens, en un mot, l'art pour l'art.
-- Nietzsche
Thierry B.
Le #21884351
--{ nobody a plopé ceci: }--

SELECT COUNT (commercial) FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'

SELECT commercial FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'



Les deux requetes ne font pas la meme chose : la premiere renvoie le
nombre d'enregistrements , la seconde renvoie les enregistrements... On
ne peut donc pas les comparer.



Ce groupe est francophone, merci



SQL est un langage transnational. Foutou vers le hachoir, où
vous avez de grandes chances de remporter le concours de la
semaine...

--
La Liberté et la Revolution sont deux concepts orthogonaux.
http://la.buvette.org/images/revolution-liberte.jpg
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Olivier Berquin
Le #21884341
OK, j'ai trouvé.
$q_closed = "
SELECT COUNT(jo_commercial) FROM Jobs
WHERE jo_commercial = '$li->ut_id' AND jo_actif = '0'";
$result_closed = sql_query ($q_closed);
if ($result_closed <> FALSE)
{
$num_closed = sql_fetch_array($result_closed);
echo "Nombre = " . $num_closed[0];
// reste du code
}

Je dois absolument me renseigner sur les différences entre
fetch_array, fetch_object...

Merci.

Oli.
nobody
Le #21884331
Thierry B. a écrit :
--{ nobody a plopé ceci: }--

SELECT COUNT (commercial) FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'







SELECT commercial FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'







Les deux requetes ne font pas la meme chose : la premiere renvoie le
nombre d'enregistrements , la seconde renvoie les enregistrements... On
ne peut donc pas les comparer.





Ce groupe est francophone, merci



SQL est un langage transnational. Foutou vers le hachoir, où
vous avez de grandes chances de remporter le concours de la
semaine...




Ahara wasia ulawa masiya. Bora nusu ya hasara raha na hasara
ndzima.Dindri la shari la waili : nahika tsi lamtsimba ne
lamtsimbiwa.Fumbo lahimbiwa mjinga mwendza ãkili ulirambua.
Fred Brouard - SQLpro
Le #21884321
Bonjour,


Olivier Berquin a écrit :
Bonjour tout le monde,

C'est ma première intervention ici.
Je voudrais savoir s'il est plus performant de faire un
SELECT COUNT (commercial) FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'

ou bien un
SELECT commercial FROM Jobs
WHERE commercial = '$li->ut_id' AND jo_actif = '0'




sans aucune commune mesure... En effet la première requête sera moins
couteuse et la différence sera de plus en plus important au fur et à
mesure du nombre de ligne.
En effet la première ne ramène qu'une seule ligne d'une seule variable
de 4 octets.
La seconde va ramner n lignes d'en moyenne 8 à 10 octets.
Or plus le volume des données à manipuler est important, moins rapide
est la requête.
Ensuite pour le traitement de la requête indépendamment des lignes
ramenées, l'indexation es primordiale.
Ainsi sans auncun index, il faut lire toute la table. Avec un index sur
(commercial, jo_actif) il ne faudra lire que les entrées d'index
correspondant.
Lisez l'article que j'ai écrit sur l'efficacité des techniques
d'indexation :
http://www.sqlspot.com/INDEXATION-une-etude-par-l-exemple.html



Merci.

Oli.




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Publicité
Poster une réponse
Anonyme