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

Développement SQL Server Discussion :

[2005] Question : Stockage et accès optimable pour des données temporaires


Sujet :

Développement SQL Server

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 448
    Points : 1 206
    Points
    1 206
    Par défaut [2005] Question : Stockage et accès optimable pour des données temporaires
    Bonjour,

    j'ai pour l'instant une application en .Net qui doit faire lors d'une opération particulière, une série de query liées entre eux sur ma base de donnée (ms sql server 2005).
    Chaque query agit comme un filtre qui élimine du résultat final certains résultats, selon certaines conditions.
    Le lien entre ces query se fait au niveau des membres (chaque query s'articule autours de la table des membres).
    J'ai donc une liste d'identifiants de membres qui évolue et est partagée parmi les query.

    Au début, je conservait cette liste en .Net pour la passer dans mes query.
    Mais cette approche à le désavantage de pouvoir générer des query très lourds (dont certain même peuvent causer un dépassement des ressources disponibles).
    Ma seconde et actuelle approche est de stocker les identifiants dans une table classique afin qu'elle n'ait pas à être échangée entre le serveur sql et l'application .Net.


    Est-ce qu'il existe un type de table ou une configuration particulièrement adapté à ce cas de figure, où les données n'ont une durée de vie que temporaire (le temps que les différents query ait pu être excécutés) ?

    PS : il est impossible de faire s'exécuter tous les query simultanément.

    Merci.
    Most Valued Pas mvp

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2005
    Messages : 5 826
    Points : 12 348
    Points
    12 348
    Par défaut
    Bonjour,

    Si vous êtes sous SQL Server 2005 ou plus, vous pouvez utiliser des expressions de table commune successives, chacune filtrant le résultat de la précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    WITH
    	CTE_1 AS
    	(
    		SELECT mesColonnes
    		FROM maTable
    		WHERE ...
    	),
    	CTE_2 AS
    	(
    		SELECT mesColonnes
    		FROM CTE_1
    		WHERE ...
    	),
    	CTE_3 AS
    	(
    		SELECT mesColonnes
    		FROM CTE_1
    		WHERE ...
    	)
    	.
    	.
    	.
    	CTE_n AS
    	(
    		SELECT mesColonnes
    		FROM CTE_n-1
    		WHERE ...
    	)
    SELECT mesColonnes
    FROM CTE_n
    @++

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 448
    Points : 1 206
    Points
    1 206
    Par défaut
    Comme je le disais les query ne peuvent être simultanément excécutés.

    D'une part, parce qu'ils renvoient tous des résultats (différents) qui me servent ailleurs.
    Et de l'autre parce que les imbriquer les uns aux autres directement en sql rendrait le tout terriblement irelisible.
    Most Valued Pas mvp

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2005
    Messages : 5 826
    Points : 12 348
    Points
    12 348
    Par défaut
    J'ai donc une liste d'identifiants de membres qui évolue et est partagée parmi les query.
    Partant de ce prédicat-là j'ai compris que vous aviez un ensemble de valeurs de clé primaire dont vous réduisez le cardinal par éliminations successives.
    Dès lors les tuples candidats à l'élimination ont tous la même structure, et on peut les éliminer en réalisant une UNION de tous les tuples à éliminer, pour ensuite effectuer un EXCEPT sur cette UNION.

    Sinon je ne comprends pas ce que vous souhaitez faire, et sans votre code, ou au moins un squelette de celui-ci c'est assez difficile à imaginer

    @++

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 448
    Points : 1 206
    Points
    1 206
    Par défaut
    Je manipule bien un cardinal de clés mais en parallèlle je récupères des données.

    Genre, je fais afficher un tableau de membres avec pour info leur cheveux et leur barbe (exemple fictif), en excluant les roux (de cheveux ou barbe) du résultat.
    Tout membre n'a pas forcément de cheveux ou de barbe.

    C'est un exemple simplifié, car si je dis que je veux 10.000 informations pour chaque coupe de cheveux et 20.000 par coupe de barbe, tu te rendras comptes que je ne souhaite pas faire un join avec un grand nombre de tuples ayant 10.000, 20.000 valeur vides simplement pour que tout soit groupé au niveau du query.
    Most Valued Pas mvp

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 988
    Points : 49 813
    Points
    49 813
    Billets dans le blog
    1
    Par défaut
    A la lecture de ce post, je pense que vous êtes partit sur une mauvaise conception ou une conception inadaptée de votre base de données à votre problème. Si vous nous donniez une partie du modèle et le genre de recherche massive que vous voulez effectuer avec une exemple concret, cela nous aiderait à vous proposer quelque chose de plus adapté !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. accès refusé pour des fichiers après formatage
    Par Yamour dans le forum Sécurité
    Réponses: 15
    Dernier message: 04/12/2013, 23h25
  2. Réponses: 6
    Dernier message: 10/08/2007, 17h23
  3. Réponses: 7
    Dernier message: 23/04/2007, 16h35
  4. Réponses: 1
    Dernier message: 24/10/2006, 01h24
  5. Ldap - Accès insuffisant pour des modfications
    Par navis84 dans le forum Réseau
    Réponses: 5
    Dernier message: 05/04/2006, 12h33

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