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

C# Discussion :

Limite d'une requête sur une BDD sql server


Sujet :

C#

  1. #1
    Débutant
    Inscrit en
    Mars 2006
    Messages
    492
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 492
    Points : 94
    Points
    94
    Par défaut Limite d'une requête sur une BDD sql server
    Bonjour,

    Je voudrai connaitre la limite d'une requête sur une BDD sql server, en effet, j'utilise Entity framework pour accéder à la BBDD en utilisant une interface .edmx, si ma base contient des millions d'enregistrements, est ce que je peux tout avoir avec seule requête, sinon est ce qu'il y a un axe d'optimisation ?

    Merci d'avance de vos retour.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par abbd Voir le message
    si ma base contient des millions d'enregistrements, est ce que je peux tout avoir avec seule requête, sinon est ce qu'il y a un axe d'optimisation ?
    Bien sûr ! Il n'y a absolument aucun intérêt à ramener des millions d'enregistrements :
    - Du point de vue de l'utilisateur, aucun (et je dis bien aucun) n'est capable ou n'a la volonté de consulter plusieurs millions d'enregistrements
    - Du point de vue technique, à part créer des lenteurs, tu n'as aucun intérêt à faire ça.

    Il existe des solutions :
    - Pagination
    - Aggrégation
    ...

  3. #3
    Débutant
    Inscrit en
    Mars 2006
    Messages
    492
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 492
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Bien sûr ! Il n'y a absolument aucun intérêt à ramener des millions d'enregistrements :
    - Du point de vue de l'utilisateur, aucun (et je dis bien aucun) n'est capable ou n'a la volonté de consulter plusieurs millions d'enregistrements
    - Du point de vue technique, à part créer des lenteurs, tu n'as aucun intérêt à faire ça.

    Il existe des solutions :
    - Pagination
    - Aggrégation
    ...
    Effectivement, j'ai réalisé un exemple de pagination avec Take() et Skip(), cependant, comment les données sont organisées ?
    par exemple on récupérer les 500 premiers puis les 500 seconds, si jamais il y a une ligne insérée, sa se passe comment ? on la récupérer dans la 3eme fois ?
    Merci d'avance.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Les SGBDR reposent tous sur la théorie des ensembles. Cela signifie entre autre qu'il n'y a aucun ordre défini par défaut dans les tables. Tu peux trouver une démonstration très simple sur le blog de SQLPro : Les données d’une base SQL sont des ensembles…

    Donc pour la pagination, il faut spécifier un ordre à l'aide de la clause ORDER BY. L'objectif étant d'avoir tout le temps le même tri appliqué au jeu de données lors de la pagination.

    Concernant ta question sur la possibilité que des lignes soient insérées/modifiées/supprimées en cours de route, effectivement c'est possible. Soit tu l'acceptes et il pourra donc y avoir de temps en temps quelques décalages, soit tu peux insérer un "tampon" entre ce qui est en base et ce qui est affiché.

    L'idée est par exemple lors de la première requête, de mettre en cache une partie des données (exemple la page 1 à la page 10). Une fois que c'est fait, tant que l'utilisateur sera dans cet intervalle, on ira récupérer les données depuis le cache, et non depuis la base de données. Lorsqu'il demande la page 11, on va récupérer les pages 11 à 20 pour les mettre en cache, et ainsi de suite.

    Ca demande donc une mécanique supplémentaire, mais ça peut être utile si tu souhaites ne pas avoir de décalages dans la pagination en cours de route...

Discussions similaires

  1. Remplacer une requête sur une class par une valeur constante ?
    Par Lillie CHARLOTTE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2015, 09h59
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. [Toutes versions] Faire en VBA une requête sur une requête paramétrée
    Par guidav dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/02/2012, 17h10
  4. Réponses: 1
    Dernier message: 30/08/2011, 09h53
  5. Tri d'une requête sur une valeur ou une autre
    Par mims1664 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/08/2009, 17h40

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