[MySQL] Stratégie des SELECT et connexions aux bases
4 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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: ******************
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:brouardf@club-internet.fr ******************
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: ******************
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
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 ?
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
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: ******************
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:brouardf@club-internet.fr ******************
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: ******************
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
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.
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.