OVH Cloud OVH Cloud

[MySQL] Stratégie des SELECT et connexions aux bases

4 réponses
Avatar
Boris
Bonjour
dans le cadre de la mise en place d'un moteur de recherche php/mysql
dans un catalogue de livres, j'aimerais mettre en place des requêtes qui
ne seront pas trop longues quand la base commencera à contenir qques
milliers d'entrées. Un peu à la amazon, je souhaite avoir une page de
résultats avec en bas "résultats 10-20 sur 280". Pour l'instant, je fais
un SELECT count(*) FROM ... WHERE ... pour atteindre le 280, et puis je
fais une seconde requête SELECT truc FROM ... WHERE ... LIMIT 10,10 pour
atteindre les résultats 10 à 20. Est-ce la meilleure stratégie ? Le
count(*) est-il le plus rapide ?
D'autre part, sachant que souvent chez les hébergeurs php/mysql, le
nombre de connectionx simultanées à une base est limité, faut-il que je
ferme manuellement la connection à la base à chaque fin de page php ou
bien la connection se ferme-t-elle automatiquement dès la fin du
chargement d'une page php ?
--
Boris
http://www.pi314.net

4 réponses

Avatar
Fred BROUARD - SQLpro
Dans le développement web, si tu veut assurer une certaine montée en
charge il faut :
1) toujours travaillé en C/S en mode déconnecté => se déconnecté de la
base le plus tôt possible.
2) ne jamais gérer de sessions côté serveur mais si l'on en as besoin,
côté client (par exemple cookie).

Pour ta pagination tu peut aussi faire :

1ere page :

SELECT CoLonneClef ...
FROM ...
WHERE ...
LIMITE 10

Puis mettre en cookie la valeur de la colonne clef de la 10e ligne

2eme page
lire le cookie cient

SELECT CoLonneClef ...
FROM ...
WHERE ...
AND ColonneClef > ValeurCookie
LIMITE 10

etc...

A +


Boris a écrit:
Bonjour
dans le cadre de la mise en place d'un moteur de recherche php/mysql
dans un catalogue de livres, j'aimerais mettre en place des requêtes qui
ne seront pas trop longues quand la base commencera à contenir qques
milliers d'entrées. Un peu à la amazon, je souhaite avoir une page de
résultats avec en bas "résultats 10-20 sur 280". Pour l'instant, je fais
un SELECT count(*) FROM ... WHERE ... pour atteindre le 280, et puis je
fais une seconde requête SELECT truc FROM ... WHERE ... LIMIT 10,10 pour
atteindre les résultats 10 à 20. Est-ce la meilleure stratégie ? Le
count(*) est-il le plus rapide ?
D'autre part, sachant que souvent chez les hébergeurs php/mysql, le
nombre de connectionx simultanées à une base est limité, faut-il que je
ferme manuellement la connection à la base à chaque fin de page php ou
bien la connection se ferme-t-elle automatiquement dès la fin du
chargement d'une page php ?



--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
Boris
Fred BROUARD - SQLpro a écrit :
Dans le développement web, si tu veut assurer une certaine montée en
charge il faut :
1) toujours travaillé en C/S en mode déconnecté => se déconnecté de la
base le plus tôt possible.



donc fermer la connection en fin de page. Est-ce qu'elle reste ouverte
même si la page php a fini de charger ?

2) ne jamais gérer de sessions côté serveur mais si l'on en as besoin,
côté client (par exemple cookie).



peut-être mais comme ce site n'aura jamais un fort traffic, je préfère
la souplesse des sessions php aux cookies pas toujours acceptés...


Pour ta pagination tu peut aussi faire :

1ere page :

SELECT CoLonneClef ...
FROM ...
WHERE ...
LIMITE 10

Puis mettre en cookie la valeur de la colonne clef de la 10e ligne

2eme page
lire le cookie cient

SELECT CoLonneClef ...
FROM ...
WHERE ...
AND ColonneClef > ValeurCookie
LIMITE 10




oui c'est pas une mauvaise idée ça
moi j'envoie à chaque page par formulaire la variable "ValeurCookie"
pour l'instant, ce qui revient à peu près au même 'jai l'impression, non ?

--
Boris
http://www.pi314.net
Avatar
Fred BROUARD - SQLpro
Boris a écrit:
Fred BROUARD - SQLpro a écrit :

Dans le développement web, si tu veut assurer une certaine montée en
charge il faut :
1) toujours travaillé en C/S en mode déconnecté => se déconnecté de la
base le plus tôt possible.




donc fermer la connection en fin de page. Est-ce qu'elle reste ouverte
même si la page php a fini de charger ?



Je ne sais pas, mais en ASP il faut faire une déconexion explicite.

2) ne jamais gérer de sessions côté serveur mais si l'on en as besoin,
côté client (par exemple cookie).




peut-être mais comme ce site n'aura jamais un fort traffic, je préfère
la souplesse des sessions php aux cookies pas toujours acceptés...



Donc tu pompe les ressources du serveur et tu ne pourra jamais passer en
werb farming...



Pour ta pagination tu peut aussi faire :

1ere page :

SELECT CoLonneClef ...
FROM ...
WHERE ...
LIMITE 10

Puis mettre en cookie la valeur de la colonne clef de la 10e ligne

2eme page
lire le cookie cient

SELECT CoLonneClef ...
FROM ...
WHERE ...
AND ColonneClef > ValeurCookie
LIMITE 10




oui c'est pas une mauvaise idée ça
moi j'envoie à chaque page par formulaire la variable "ValeurCookie"
pour l'instant, ce qui revient à peu près au même 'jai l'impression, non ?



oui !

A +

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
Boris
Fred BROUARD - SQLpro a écrit :


Boris a écrit:

Fred BROUARD - SQLpro a écrit :
peut-être mais comme ce site n'aura jamais un fort traffic, je préfère
la souplesse des sessions php aux cookies pas toujours acceptés...




Donc tu pompe les ressources du serveur et tu ne pourra jamais passer en
web farming...


t'es dur... :-)
je veux bien pour des gros sites à longue session m'enfin pour des
petits sites... après tout si l'hébergeur active les sessions, c'est
qu'il accepte implicitement cet état de fait. Et comment fait-on si
l'utilisateur n'accepte pas les cookie ?
Cela dit, je retiens ton point de vue, merci de me l'avoir précisé, je
n'avais pas vu les choses sous cet angle.

--
Boris
http://www.pi314.net