par
Ripat » 08 oct. 2005, 14:21
Les index servent à la requête de génération du classement mais pas pour mon problème en fait.
Dans la bdd c'est dans l'ordre 0,1,2,3 etc mais je travaille sur un classement issu d'une requête composée de 3 order by, les index ne servent pas à ce niveau (sauf si j'utilise une table de cache mais je cherche une autre solution justement).
Deux choses:
- Si le but est de trouver une ligne d'un tableau de résultats, je peux comprendre ton souci d'éviter un deuxième accès à ta table MySQL mais, pour trouver une valeur dans un tableau à deux dimensions (typique d'un tableau de résultats d'une requête), il n'y a pas de miracle, la fonction array_search ne marchera pas. Il te faudra complètement traverser ton tableau de résultats. Pas optimum.
Il sera infiniment plus efficace de faire les frais d'un deuxième accès à ta table MySQL.
A titre d'exemple, je viens de faire quelques essais.
Code : Tout sélectionner
# recordset de 10.000 lignes
Recherche PHP dans le tableau de résultats 0.2106 sec
Requête MySQL sur la table SANS index 0.0151 sec.
Requête MySQL sur la table AVEC index 0.0004 sec.
# recordset de 100.000 lignes
Recherche PHP dans le tableau de résultats 2.0821 sec
Requête MySQL sur la table SANS index 0.2458 sec.
Requête MySQL sur la table AVEC index 0.0004 sec.
Tu vois que même lorsque tu demandes à MySQL de lire séquentiellement une table non indexée, il le fait de manière plus efficace. Et avec l'utilisation d'index, il n'y a pas photo.
- S'il s'agit simplement d'accéder au x ième enregistrement de ton tableau de résultats, c'est très simple, utilise l'indice numérique du tableau (plus 1 car ce tableau commence à 0)
Pour te conseiller plus avant, il nous faut un exemple maintenant.
[quote="alpha"]Les index servent à la requête de génération du classement mais pas pour mon problème en fait.
Dans la bdd c'est dans l'ordre 0,1,2,3 etc mais je travaille sur un classement issu d'une requête composée de 3 order by, les index ne servent pas à ce niveau (sauf si j'utilise une table de cache mais je cherche une autre solution justement).[/quote]
Deux choses:[list=1][*]Si le but est de trouver une ligne d'un tableau de résultats, je peux comprendre ton souci d'éviter un deuxième accès à ta table MySQL mais, pour trouver une valeur dans un tableau à deux dimensions (typique d'un tableau de résultats d'une requête), il n'y a pas de miracle, la fonction array_search ne marchera pas. Il te faudra complètement traverser ton tableau de résultats. Pas optimum.
Il sera infiniment plus efficace de faire les frais d'un deuxième accès à ta table MySQL.
A titre d'exemple, je viens de faire quelques essais.
[code]# recordset de 10.000 lignes
Recherche PHP dans le tableau de résultats 0.2106 sec
Requête MySQL sur la table SANS index 0.0151 sec.
Requête MySQL sur la table AVEC index 0.0004 sec.
# recordset de 100.000 lignes
Recherche PHP dans le tableau de résultats 2.0821 sec
Requête MySQL sur la table SANS index 0.2458 sec.
Requête MySQL sur la table AVEC index 0.0004 sec.
[/code]
Tu vois que même lorsque tu demandes à MySQL de lire séquentiellement une table non indexée, il le fait de manière plus efficace. Et avec l'utilisation d'index, il n'y a pas photo.
[*]S'il s'agit simplement d'accéder au x ième enregistrement de ton tableau de résultats, c'est très simple, utilise l'indice numérique du tableau (plus 1 car ce tableau commence à 0)[/list]
Pour te conseiller plus avant, il nous faut un exemple maintenant.