La requete ImageCommentsCategoriesFRSearchTag prend maintenant entre 1.8 et 2.4 secondes ce qui me parrait plus acceptable (pour >58000 images). Donc je vais utiliser celle ci pour la recherche.
Sinon vimages - toutes les felicitations! Et bon courage!
vimages a écrit:
bon, demain je passe devant Mr le Maire... et oui... après 12 ans de vie commune... et puis ma fille y tenait!
Toutes mes félications aux mariés!
Mais qui va prendre les photos?
Noceur !!! Noceurs ???
Vive la Mariée !!!
Toutes mes félicitations, Eric ainsi qu'à ta belle.
(12 ans, pas mal...
Pas rapide comme recherche, mais comme quoi les échelles de temps entre mondes réels et virtuels n'ont rien à voir.)
Bref, quelle belle [Evolution], on te pardonne de ne pas avoir de tes nouvelles quelques jours...
Bonne fiasta, bonne Lune.
Bon voyage.
A bientôt, Monsieur le jeune marié.
8-)
salut,
je viens de rentrer, je trie et poste quelques photos du week-end, pour la presse... j'étais au Mont Dore.. gelé ! 8°, ciel gris, pluie, grèle !! et tout ça en moto, chargé comme un âne, (faut bien caser les boîtiers, le 500mm, l'ordi et le reste..) enfin, je m'égare.... sorry..
bon, je viens de re-télécharger et de re-mettre sur le site le fichier qsearch.php .. modifié, si j'ai bien compris...
il semble que vous ayez bossé dur aussi !
bon, demain je passe devant Mr le Maire... et oui... après 12 ans de vie commune... et puis ma fille y tenait!
alors pas d'internet ! mais à trés bientôt !!
éric.
VDigital a écrit:
J'espère que tu as lu mon post de'Aujourd'hui 19:28:27 .
J'avoue avoir passé plus de temps à lire tes requêtes que le code.
Oui biensur j'ai lu. Ca confirme mes mesures, mais j'aimerai voir ce que ca donne avec 58K photos.
J'espère que tu as lu mon post de'Aujourd'hui 19:28:27 .
J'avoue avoir passé plus de temps à lire tes requêtes que le code.
8-)
En fait la ImageCommentsCategoriesFRSearchTag est celle qui est la plus proche de la realite d'apres moi et celle que je prefere. Elle est plus rapide que la FullTextSearch (la plus grosse - l'initiale). Il faut juste voir ce que ca donne sur la base de vimages.
P.S. J'ai update de nouveau le script (j'avais merde a la fin sur les resultats un array_diff_assoc a la place d'un array_intersect_key - ca n'affecte pas les requetes, mais les resultats affichees)
(
Je n'ai pas regardé en détail mais je suis surpris de relever que le LEFT JOIN de SmartSearch soit plus performant que celui de ImageCommentsFTSearch
)
FullTextSearch a écrit:
SELECT id, MATCH(ft) AGAINST( "xxxxx yyyyy" IN BOOLEAN MODE) AS q FROM (
SELECT
i.id, CAST( CONCAT_WS(" ",
i.file,
IFNULL(i.name,""),
IFNULL(i.comment,""),
IFNULL(GROUP_CONCAT(DISTINCT co.content),""),
IFNULL(GROUP_CONCAT(DISTINCT t.name),""),
IFNULL(GROUP_CONCAT(DISTINCT c.dir),""),
IFNULL(GROUP_CONCAT(DISTINCT c.name),""),
IFNULL(GROUP_CONCAT(DISTINCT c.comment),"") ) AS CHAR) AS ft
FROM
(
(
(
(phpwebgallery_images i LEFT JOIN phpwebgallery_image_tag it ON i.id=it.image_id )
LEFT JOIN
phpwebgallery_comments co on i.id=co.image_id
)
LEFT JOIN
phpwebgallery_tags t on t.id=it.tag_id
)
INNER JOIN
phpwebgallery_image_category ic on ic.image_id=i.id
)
INNER JOIN
phpwebgallery_categories c on c.id=ic.category_id
GROUP BY i.id) AS Y
WHERE MATCH(ft) AGAINST( "xxxxx yyyyy" IN BOOLEAN MODE)
ORDER BY q DESC LIMIT 0,50
(this query time : 0.320 s)
(total SQL time : 0.324 s)
(total time : 0.368 s)
Reste à éliminer les images n'appartenant pas à aucune catégorie autorisée.
Belle collection de jointures, j'ai un peu de mal à suivre. 8-D
Les colonnes de jointure sont toutes indexées à priori pas de pb.
Le MATCH() AGAINST, j'ai peur qu'il le calcule deux fois.
J'espère qu'il le calcule d'abord pour la clause WHERE puis uniquement sur les lignes résultantes pour calculer q avant de trier sur q
Comment le savoir EXPLAIN ?
Un test sans l'order by mais avec les deux MATCH()
Puis un test toujours sans l'order by et sans celui du select.
Appliqué à un résultat volumineux si la différence est > 20% il faut se poser la question de l'intérêt.
LIMIT ne pouvant être appliquée qu'après tri cela ne change pas grand chose pour MySQL sauf pour le serveur.
Mais pour moi, elle est parfaitement écrite, à la portée d'un développeur sur 10000 quand même mais Bravo.
Analysons vite fait le reste (j'ai abbrégé les requêtes)
Une remarque certaines queries applique le contrôle sur les id non autorisés d'autres non.
ImageFTSearch a écrit:
FROM phpwebgallery_images i
(this query time : 0.006 s)
Très speed.
ImageCommentsFTSearch a écrit:
FROM phpwebgallery_images i
LEFT JOIN phpwebgallery_comments co on i.id=co.image_id
(this query time : 0.063 s)
Un left join = x10
ImageCommentsCategoriesFRSearchTag a écrit:
FROM (
FROM (
(
phpwebgallery_images i LEFT JOIN phpwebgallery_comments co on i.id=co.image_id
)
INNER JOIN
phpwebgallery_image_category ic on ic.image_id=i.id
)
INNER JOIN
phpwebgallery_categories c on c.id=ic.category_id
(this query time : 0.049 s)
+
FROM phpwebgallery_tags
(this query time : 0.028 s)
+
FROM phpwebgallery_images
INNER JOIN phpwebgallery_image_category AS ic ON id = ic.image_id
(this query time : 0.003 s)
Je m'attendais à pire du fait du double inner join, bonne surprise.
Total = 0.080 s
SmartSearch a écrit:
FROM phpwebgallery_tags
(this query time : 0.001 s)
+
FROM phpwebgallery_categories INNER JOIN phpwebgallery_image_category ON id=category_id
(this query time : 0.002 s)
+
FROM (
FROM phpwebgallery_images i
LEFT JOIN phpwebgallery_comments co on i.id=co.image_id
(this query time : 0.037 s)
+
FROM phpwebgallery_images
INNER JOIN phpwebgallery_image_category AS ic ON id = ic.image_id
(this query time : 0.003 s)
Splendide
Total = 0.043 s
Conclusion : FullTextSearch est très belle pour les amateurs mais les autres sont très loin des 0.320 s
Je ne doute pas que la différence chez Eric sera encore plus grande.
Je te laisse rectifier mes remarques... Encore bravo !!!
8-)
J'ai déjà regardé ta nouvelle version (lecture uniquement), je la testerai aussi sur mon site tout à l'heure...
8-)
J'ai update ma page de recherche en faisant des variations sur la requete. Au retour de vimages je vais lui demander s'il peut remettre la nouvelle version sur son site pour que je teste si d'autres requetes sont plus rapides.
rvelices a écrit:
Pour clarifier les 2 type de recherche:
- l'ancienne reste tel quel
- la nouvelle apparaitra juste qq part sur la page index (dans le menubar ou ailleurs).
Les index fulltext ne sont pas necessaires si la recherche est en mode boolean (c'est le cas). Je vais voir si je peux faire la grosse requete autrement au depens de la qualite des resultats mais au profit du temps d'execution.
Toute l'équipe est d'accord... tant sur le fond que la forme, c'est bien.
Et je rejoins ton avis sur les index fulltext (lesquels posent plus de problèmes de perf qu'ils n'en résolvent (AMHA)).
Je vais aujourd'hui télécharger ton module pour regarder ta requête.
Super! Merci.
Pour clarifier les 2 type de recherche:
- l'ancienne reste tel quel
- la nouvelle apparaitra juste qq part sur la page index (dans le menubar ou ailleurs).
Les index fulltext ne sont pas necessaires si la recherche est en mode boolean (c'est le cas). Je vais voir si je peux faire la grosse requete autrement au depens de la qualite des resultats mais au profit du temps d'execution.
rvelices a écrit:
rub a écrit:
Les deux recherches seront-elles présentes? Si oui, on peut faire un onglet recherche simplifié et recherche rapide (avec affichage suivant $conf)
J'avais en tete une seule recherche, pas 2. Cette recherche vient s'ajouter a la fonctionnalite de recherche actuelle.
Je ne penses pas qu'il faille ajouter cette nouvelle recherche dans ce qui existe, ca risque de ne pas être clair pour ton le monde. Mieux vaut à mon avis dissocier les deux types de recherches (soit 2 pages, 2 onglets, des zones invisibles qui deviennent visibles, etc.)
mathiasm a écrit:
pour info, radu: relevance = pertinence :-)
J'ai eu du mal à comprendre!