requetes SQL: choix entre 2 methodes

requetes SQL: choix entre 2 methodes - SQL/NoSQL - Programmation

Marsh Posté le 18-04-2006 à 00:48:13    

Bonjour,  
 
J'aurais quelques questions. La premiere est très conne je l'avoue mais je demande quelque précisions:
- Une requete sql simple du genre "select * from nom_table" est-elle plus rapide qu'une requete un peu plus "compliquée" du genre "select * from table1,table2 where table1.id=table2.nom order by table2.nom asc" ? si oui ce gain de temps est-il significatif?
 
- sur le lien suivant http://welcominh2.free.fr/index.ph [...] p&lettre=f, vous pouvez voir des albums avec les liens correspondants. Donc une table album, et une autre table nommé lien. Sur cette page, j'ai compté 13 requetes sql: 1 pour récupérer tous les albums, 12 pour récupérer les liens de chaque album (12 albums sur la page).  
Ce ne sont que des requetes simples. (avec une seule condition et pas de jointure) Gagnerai-je en performances à ne faire qu'une requete (qui comporte 2 conditions et 1 jointure) ?
 
merci pour votre aide  :jap:


Message édité par welcominh le 18-04-2006 à 00:50:57

---------------
Direct-download.com, le moteur de recherche pour Mega
Reply

Marsh Posté le 18-04-2006 à 00:48:13   

Reply

Marsh Posté le 18-04-2006 à 07:43:04    

Pour optimiser il faut mesurer.
 
Les prédictions ne sont pas toujours fiables parce qu'il y a beaucoup d'éléments qui rentrent en jeu.
 
D'une manière général, un mouvement d'octets sur un réseau est 10 à 1000 fois plus lent qu'un mouvement d'octets entre le disque et la mémoire, lequel mouvement est 10 à 1000 fois plus lent qu'un mouvement entre la mémoire et le micro processeur.
 
Pour les deux questions, il ne devrait pas y avoir beaucoup de différences, parce que les volumes devraient être à peu près les mêmes qu'il y ait une ou deux tables, qu'il y ait deux ou treize requêtes.

Reply

Marsh Posté le 24-04-2006 à 11:55:08    

olivthill a écrit :


Pour les deux questions, il ne devrait pas y avoir beaucoup de différences, parce que les volumes devraient être à peu près les mêmes qu'il y ait une ou deux tables, qu'il y ait deux ou treize requêtes.


Je pensais au départ que faire 13 requêtes portant sur X volumes de données était plus lent que 1 requete portant sur le même X volume de données.  :sweat:  
Parce que le temps d'accès ne représente pas aussi une partie du temps de réponse? si on multiplie ce temps d'accès par 13  :??:


---------------
Direct-download.com, le moteur de recherche pour Mega
Reply

Marsh Posté le 24-04-2006 à 12:01:48    

Est-ce que c'est plus lent ?
Est-ce que c'est significativement plus lent ?
 
Je n'en sais rien avec certitude. Les temps réponse dépendent de beaucoup de facteurs, pas seulement du principe général de l'algorithme.
 
Il faut mesurer.

Reply

Marsh Posté le 24-04-2006 à 13:45:23    

olivthill a écrit :

 
Il faut mesurer.


OK je vais essayer ca. Il me semble que phpMyAdmin me donne les temps de réponse je crois. Vais calculer tout ca...
 
merci  :jap:  


---------------
Direct-download.com, le moteur de recherche pour Mega
Reply

Marsh Posté le 26-04-2006 à 14:15:12    

Sans certitude :
 
Une requete SELECT FROM WHERE ORDER BY est-elle plus lente qu'un SELECT FROM ?
La logique voudrait que oui. Mais d'une maniere absolument pas significative (enfin dans le cadre d'une table avec un nombre d'enregistrement modéré ou d'index bien mis en place).
 
Une requete avec 2 conditions et 1 jointure vaut elle mieux que 13 requetes simple.
Pour moi, oui, cette fois-ci de maniere plus significative.
Pourquoi ?
Tout simplement parce que comme je te l'ai dit plus haut, d'un point de vue traitement en mémoire dans le SGBD, à ce niveau de complexité, ce n'est pas significatif. Ce qui va être significatif, c'est que dans un cas, tu vas envoyer la requete une fois, et recevoir une réponse, soit un seul appel à la base. Dans l'autre cas, tu vas envoyer treize fois une requete, et recevoir treize fois une réponse. Soit 13 appels à la base.  
 
Dans les deux cas, la taille totale des réponses sera identique, par contre, dans le deuxieme cas de figure, la taille totale des requetes sera plus grande que dans le premier cas.
 
En résumant, avec 13 requetes simple, tu fais 12 accès à la base supplémentaire, et tu fais transiter plus de données en terme d'octets. Pour peu que ton serveur de base de données et ton serveur Web ne soit pas le même, avec la lenteur du passage des octets par le réseau, ton temps devient significatif ;) !
 
D'ou l'interet des procedures stockées également, qui te permette de limiter les accès à la base ;) !
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed