Recherche csv VS recherche mysql - PHP - Programmation
Marsh Posté le 02-01-2005 à 19:28:58
Il y a quelques temps j'avais posé plus ou moins la même question que toi (c'était des fichers texte) et on m'avait repondu qu'une requete SQL est toujours plus rapide qu'un acces a un ficher... J'ai pas eu moyen de m'en rendre compte par moi-meme... Je reste interessé à des réponses eventuelles
Marsh Posté le 02-01-2005 à 21:54:38
théoriquement (ce qui veut dire en théorie), le temps de recherche dans une BDD est nettement moins sensible au nb d'enregistrement que dans un fichier...
en gros plus tu as d'info, plus le temps de recherche augmente (de façon plus ou moins proportionnelle) pour un fichier... Une BDD c'est fait pour stocker des données --> ça a été conçu pour rester rapide meme avec un max d'infos...
Mais moi non plus je n'ai pas vraiement fait de test poussé la-dessus, MySQL c'est gratuit et se gère très bien avec PHP, donc j'ai tjs opté pour la BDD (vu que pour un stage de fin d'étude j'avais du me mettre au SQL et au BDD access... au moins ça a fini par me servir )
Marsh Posté le 02-01-2005 à 23:09:59
C'est ce que je me disais aussi (MySql plus rapide)
Ca me semble logique car les mécanismes des requetes sql doivent être optimisés.
Ce qui n'est pas forcement le cas de mon script de recherche dans un csv.
A moins d'utiliser des algorithmes de recherche du type dicotomie.
Pour l'instant ce que j'ai codé recherche dans un fichier csv puisque c'est sous ce format que sont les données que je dois traiter.
Je vais coder une deuxieme version avec recherche dans la base mysql et en utilisant des timestamp je devrais pouvoir déterminer laquelle des deux méthodes est plus rapide.
Marsh Posté le 11-01-2005 à 11:17:09
La version Mysql est faite et comme prévu c'est beaucoup plus rapide. Ca se voit à l'oeil nu.
Je vais ajouter les pointeurs de temps aujourd'hui pour quantifier le gain.
Marsh Posté le 11-01-2005 à 11:40:53
merci d'avoir fait le test, meme si le résultat était prévisible, c'est en tout cas rassurant
(paske si une "Base De Données" n'était pas ce qu'il y de plus rapide pour stocker et retrouvé des "données", ça m'aurait inquiété...)
Marsh Posté le 11-01-2005 à 13:19:56
je rajouterais ceci.
Ont perçoit pas forcement la vitesse lorsqu'il y a quelques enrgistrement. Par contre si ont atteind les 100 000 enregistrements la base de données ira bien plus vite que par systeme de fichier. les bd ont des algorythmes optimisé pour les recherches.
Marsh Posté le 11-01-2005 à 13:31:42
Faut pas oublier que pour que la BDD soit rapide il faut que les tables soient bien construites, je pense notament aux cles PRIMARY, INDEX et compagnie. Regardez donc la doc mysql pour bien optimiser les tables afin que la recherche y soit des plus rapide et efficace.
Marsh Posté le 11-01-2005 à 20:07:22
Voici les temps mesurés sur quelques recherches sachant que les données traitées sont : une table/fichier csv de 39569 enregistrements et une deuxième table/fichier csv de 8358 enregistrments
Pour chaque recherche, on fait une recherche LDAP et ensuite une recherche dans chacune des deux tables/fichiers csv pour chaque resultat de la requete LDAP
Recherche retournant 1 résultat avec 1 recherche ldap + 2 recherches mysql/csv
CSV : 3 sec
SQL : 1 sec
Recherche retournant 5 résultats avec 1 recherche ldap + 10 recherches mysql/csv
CSV : 11 sec
SQL : 4 sec
Recherche retournant 14 résultats avec 1 recherche ldap + 28 recherches mysql/csv
CSV : 20 sec
SQL : 8 sec
Recherche retournant 48 résultats avec 1 recherche ldap + 96 recherches mysql/csv
CSV : Maximum execution time of 30 seconds exceeded
SQL : 22 sec
Recherche retournant 68 résultats avec 1 recherche ldap + 116 recherches mysql/csv
CSV : Maximum execution time of 30 seconds exceeded
SQL : 26 sec
Marsh Posté le 11-01-2005 à 20:46:55
Avec des index dans la base mysql c'est encore mieux
Recherche retournant 1 résultat avec 1 recherche ldap + 2 recherches mysql/csv
SQL avec INDEX : 0 sec
SQL sans INDEX : 1 sec
Recherche retournant 5 résultats avec 1 recherche ldap + 10 recherches mysql/csv
SQL avec INDEX : 1 sec
SQL sans INDEX : 4 sec
Recherche retournant 14 résultats avec 1 recherche ldap + 28 recherches mysql/csv
SQL avec INDEX : 2 sec
SQL sans INDEX : 8 sec
Recherche retournant 48 résultats avec 1 recherche ldap + 96 recherches mysql/csv
SQL avec INDEX : 7
SQL sans INDEX : 22 sec
Recherche retournant 68 résultats avec 1 recherche ldap + 116 recherches mysql/csv
SQL avec INDEX : 9
SQL sans INDEX : 26 sec
Marsh Posté le 02-01-2005 à 19:12:25
A votre avis une recherche dans un fichier csv est elle plus ou moins rapide que la même recherche dans une table mysql ?
Il s'agit de fichiers/bases de + de 10000 enregistrements