IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Pagination ASP avec SQL Server 2005


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Points : 19
    Points
    19
    Par défaut Pagination ASP avec SQL Server 2005
    Bonsoir,

    Je possède un serveur Windows 2003 avec IIS6 et SQL Server 2005.
    Mon site (http://www.absonet.com/Catalogue.html) compte 30000 articles dans une table de ma base de données.

    Je souhaite afficher ces articles en les paginant par 50 ou 100 de façon rapide et efficace.
    Si j'utilise la méthode TOP xxx, je n'ai plus de pagination et si je demande à SQL de me fournir l'ensemble des enregistrements, il est lent à mourir.

    Je vous remercie de votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Essaye avec les options de fenêtrage

  3. #3
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Voici une option avec ordannancement simple sur la clé primaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @PageNo INT = 1
     
    SELECT
    	*
    FROM (SELECT
    	*,
    	ROW_NUMBER() OVER (ORDER BY ID) AS row
    FROM TA_TABLE) AS T1
    WHERE T1.row > ((10 * @PageNo) - 10)
    AND T1.row <= (10 * @PageNo)
    Tu peux faire une procédure stockée avec le numéro de page comme variable par exemple. Si tu veux trier autrement il faut joué avec l'ORDER BY

    EDIT : J'ai mis 10 comme nombre de résultats par page. Tu pourras bien sur mettre ce que tu veux ou même envisager d'avoir le choix dans la procédure stockée en passant le nombre de pages en paramètre comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE @PageNo INT = 1
    DECLARE @NumParPage INT = 50
     
    SELECT
    	*
    FROM (SELECT
    	*,
    	ROW_NUMBER() OVER (ORDER BY ID) AS row
    FROM TA_TABLE) AS T1
    WHERE T1.row > ((@NumParPage * @PageNo) - @NumParPage)
    AND T1.row <= (@NumParPage * @PageNo)

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 856
    Points : 52 992
    Points
    52 992
    Billets dans le blog
    6
    Par défaut
    Le problème de la pagination est que la plupart des méthodes passent par une relance de l'intégralité de la requête, avec plusieurs inconvénients :
    • 1) le cout sera de n fois (nombre de page vues) la requête de base
    • 2) si les données évoluent, des produits seront reclassés et soit revus sur une page différente, soient "oubliés"

    Lorsque l'on veut optimiser une pagination, il faut passer par un mécanisme de cache client :
    • 1) je lance une première fois la requête sans le détail, mais avec les clefs et en numérotant les lignes
    • 2) je stocke ce résultat dans un objet client : table temporaire locale, tableau mémoire....
    • 3) pour chaque page demandée, je fais une requête allant retrouver les n lignes de la page p, à partir des clefs de la table en mémoire.

    Ceci minimise le coût de requête au maximum !

    A +

Discussions similaires

  1. Synchronisation des Données avec SQL Server 2005
    Par attouchi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/07/2006, 16h14
  2. planifier une sauvegarde avec sql server 2005
    Par morados dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/06/2006, 14h09
  3. [VS] Remote connection avec SQL Server 2005 Express
    Par L`artiste dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2006, 22h28
  4. Cube OLAP local avec SQL Server 2005 ??
    Par atom.hic dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/03/2006, 16h27
  5. [SQL-Server] Je n'arrive pas à faire tourner php avec Sql server (2005)
    Par bluecurve dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/03/2006, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo