Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Performances SELECT COUNT()

13 réponses
Avatar
Olivier Berquin
Bonjour tout le monde,

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

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


Merci.

Oli.

10 réponses

1 2
Avatar
Jogo
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 -
Avatar
Olivier Berquin
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.
Avatar
Alain Montfranc
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.
Avatar
nobody
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
Avatar
Olivier Berquin
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.
Avatar
Jogo
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
Avatar
Thierry B.
--{ 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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Avatar
Olivier Berquin
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.
Avatar
nobody
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.
Avatar
Fred Brouard - SQLpro
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 *************************
1 2