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 :

performance données VARBINARY(MAX)


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut performance données VARBINARY(MAX)
    Bonjour

    Je cherche à optimiser les accès à la table autoref suivante
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    CREATE TABLE [dbo].[T_DEVPART_DPT](
    	[DPT_ID] [int] IDENTITY(1,1) NOT NULL,
    	[DEV_ID] [int] NOT NULL,
    	[DPT_PID] [int] NULL,
    	[DPT_ORD] [int] NOT NULL,
    	[DPS_ID] [dbo].[D_SOUS_TYP_ELEMENT] NOT NULL,
    	[DPT_PRN] [bit] NULL CONSTRAINT [DF_T_DEVPART_DPT_DPT_PRN]  DEFAULT ((1)),
    	[DPT_FAMILLE] [dbo].[D_FAMILLE_ARTICLE] NULL,
    	[DPT_SFAMILLE] [dbo].[D_FAMILLE_ARTICLE] NULL,
    	[DPT_REF] [dbo].[D_REF_ARTICLE] NULL,
    	[DPT_LIBELLE] [dbo].[D_LIBELLE_ARTICLE] NULL,
    	[DPT_QTE] [dbo].[D_QTE_ARTICLE] NOT NULL,
    	[UPU_CODE] [dbo].[D_UNIT_PU] NOT NULL,
    	[DPT_PUA1] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_PUA2] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_PUVST] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_PUVHF] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_PUV1] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_MT_AJUST] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_PUVF] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_NB_HRS_MO] [dbo].[D_QUANTITE_GEN] NULL,
    	[DPT_MT_MO] [dbo].[D_MT_MONETAIRE] NULL,
    	[DPT_TEXTCOM] [varbinary](max) NULL,
    	[DPT_TSTAMP] [timestamp] NULL,
     CONSTRAINT [PK_T_DEVPART_DPT] PRIMARY KEY CLUSTERED 
    (
    	[DPT_ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    SET ANSI_PADDING ON
    GO
    ALTER TABLE [dbo].[T_DEVPART_DPT]  WITH CHECK ADD  CONSTRAINT [FK_T_DEVPART_DPT_DEV_ID] FOREIGN KEY([DEV_ID])
    REFERENCES [dbo].[T_DEVIS_DEV] ([DEV_ID])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[T_DEVPART_DPT] CHECK CONSTRAINT [FK_T_DEVPART_DPT_DEV_ID]
    GO
    ALTER TABLE [dbo].[T_DEVPART_DPT]  WITH CHECK ADD  CONSTRAINT [FK_T_DEVPART_DPT_PID] FOREIGN KEY([DPT_PID])
    REFERENCES [dbo].[T_DEVPART_DPT] ([DPT_ID])
    GO
    ALTER TABLE [dbo].[T_DEVPART_DPT] CHECK CONSTRAINT [FK_T_DEVPART_DPT_PID]
    GO
    ALTER TABLE [dbo].[T_DEVPART_DPT]  WITH CHECK ADD  CONSTRAINT [FK_T_DEVPART_DPT_UPU_CODE] FOREIGN KEY([UPU_CODE])
    REFERENCES [dbo].[T_UNITPU_UPU] ([UPU_CODE])
    GO
    ALTER TABLE [dbo].[T_DEVPART_DPT] CHECK CONSTRAINT [FK_T_DEVPART_DPT_UPU_CODE]
    Je m'interroge sur l'impact de ce champ DPT_TEXTCOM en varbinary(mex)
    NON NULL sur environ 10 % des lignes (2100000 au total) et dont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT AVG(LEN(DPT_TEXTCOM)) FROM T_DEVPART_DPT
    WHERE DPT_TEXTCOM IS NOT NULL
    donne 2500

    ce champ peut assez facilement être requêté à part dans mon application cliente , donc je m'interroge sur l'utilité de le déplacer dans une deuxième table avec un champ répétant la même clef primaire, quelle incidence cela peut avoir sur la fragmentation des index notamment

    Bruno

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Aucun intérêt, en effet les LOBs (large Object Binary) ne sont pas stockée dans la ligne de la table mais dans des pages à part, sauf si vous avez précisé l'option "text in row" à l'aide de la procédure stockée sp_tableoption

    Ceci est visible à l'aide de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT OBJECTPROPERTY (OBJECT_ID( '[dbo].[T_DEVPART_DPT]') , 'TableTextInRowLimit' )
    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/ * * * * *

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    La commande que vous donez renvoit NULL, donc je suppose que cela veut dire que les LOB ne sont pas stockée dans la ligne,
    Ce qui est stocké dans la ligne c'est juste un pointeur alors donc?

  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
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Il n'est pas normal qu'elle renvoie NULL. Elle devrait renvoyer 0. Es-te vous bien dans la bonne base ?

    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/ * * * * *

  5. #5
    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 : 44
    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
    Par défaut
    Bonjour,

    En fait, ce n'est pas la bonne table, ou son nom a été écorché.
    En effet, si la table n'existe pas dans la BD, alors la fonction retourne NULL.

    @++

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    Oui en effet j'ai oublié le
    avant , la fonction retourne bien 0 donc FALSE
    je m'excuse

Discussions similaires

  1. Indexation textuelle XML dans colonne varbinary(max) ?
    Par elsuket dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/02/2011, 14h04
  2. sql server 2005 VARBINARY(MAX)
    Par est09 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/01/2010, 20h22
  3. Réponses: 1
    Dernier message: 15/01/2010, 16h20
  4. Recuperer un champ varbinary(MAX)
    Par Msysteme dans le forum C#
    Réponses: 2
    Dernier message: 19/10/2009, 16h23

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