par
cf357 » 25 nov. 2008, 18:22
Bonjour tout le monde !
J'ai développé un moteur de recherche d'utilisateurs plutot avancé, avec disons une trentaine de critères, des jointures, des GROUP BY, etc...
Toutes les requetes en elle même sont plutôt optimisées, les index sont mis aux bons endroits.
Seulement voilè, je voudrai compter le nombre de résultats (pour mon système de paginations), et, lorsque la requete est complexe, je procède comme cela :
Code : Tout sélectionner
SELECT COUNT(*) FROM (SELECT ... FROM `user` WHERE ... GROUP BY ... HAVING ...) AS myCount
Puisque je ne peux pas toujours mettre le COUNT(*) dans la requete directement (à cause d'une clause GROUP BY, par exemple...). Du coup, lorsque la recherche retourne 60 000 résultats, cela peut prendre une quinzaine de secondes à compter tout ce qui match.
Je recherche un moyen de faire mieux, j'ai vu des trucs sur l'approximation mais je préfererai éviter si je peux faire sans.
Remarques bienvenues !
Bonjour tout le monde !
J'ai développé un moteur de recherche d'utilisateurs plutot avancé, avec disons une trentaine de critères, des jointures, des GROUP BY, etc...
Toutes les requetes en elle même sont plutôt optimisées, les index sont mis aux bons endroits.
Seulement voilè, je voudrai compter le nombre de résultats (pour mon système de paginations), et, lorsque la requete est complexe, je procède comme cela :
[code]SELECT COUNT(*) FROM (SELECT ... FROM `user` WHERE ... GROUP BY ... HAVING ...) AS myCount[/code]
Puisque je ne peux pas toujours mettre le COUNT(*) dans la requete directement (à cause d'une clause GROUP BY, par exemple...). Du coup, lorsque la recherche retourne 60 000 résultats, cela peut prendre une quinzaine de secondes à compter tout ce qui match.
Je recherche un moyen de faire mieux, j'ai vu des trucs sur l'approximation mais je préfererai éviter si je peux faire sans.
Remarques bienvenues !