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 :

[SQL 2000] Problème de perf sur Order


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut [SQL 2000] Problème de perf sur Order
    SAlut

    Je suis confronté à un souci que je n'arrive pas à explqieur : j'ai une reuqête de sélection classique qui met 3 secondes à me retourner un jeu de résultat de 26000 lignes avec des clauses WHERE.

    Mais lorsque je rajoute un order by sur un champ 'Nom' qui est du texte, ça mets plus de trois minitues à sortir et encore, je ne suis pas allé jusqu'au bout.

    J'ai ajouté un Index sur Nom, dans la table d'origine, mais rien n'y fait.

    Pouvez vous m'aider ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    bonjour,

    cela dépend également de la taille de la table lue. Il faudrait voir la structure de la table, ses index et la requête lancée.

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Est ce que vous pouvez poster le plan d'exécution de la requete et le script de création de ola table et des objets rattachés ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bonjour

    Alors voilà la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT TOP 1000000
    M.Id_Locad, M.id_membre,M.zzzage,
    M.Nom, M.Prenom, M.Adresse, M.Complement, V.NomVille, V.CPVille,
    M.Telephone, M.Portable, M.Date_Inscription, M.Date_Inactivation, M.Date_Last_Modif,
     
    ISNULL(DATEDIFF(yyyy, M.Date_Naissance, GETDATE()),0) AS Age, 
    M.Sexe, M.Id_Profession, M.Id_Secteur, M.Id_Situation, M.Nb_Enfants, M.Id_Provenance,M.email,M.date_naissance,
     
    V.IDDep AS Departement, V.IdRegion as Region
    FROM MEMBRES M
    INNER JOIN devbv.Centrale.dbo.ListingVille V ON V.IdDecoupage = M.Id_Ville
    WHERE M.Id_Locad NOT IN(SELECT DISTINCT Id_Membre FROM Motif_Membre)
    ORDER BY Nom, Prenom
    Voilà la structure de la table
    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
    50
    51
    52
    53
    54
    55
    56
    57
     
    CREATE TABLE [dbo].[MEMBRES] (
    	[Id_Locad] [int] NOT NULL ,
    	[Id_Membre] [int] NULL ,
    	[Id_Civilite] [int] NULL ,
    	[Nom] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[Prenom] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[PrenomSalt] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[Adresse] [varchar] (150) COLLATE French_CI_AS NULL ,
    	[Complement] [varchar] (150) COLLATE French_CI_AS NULL ,
    	[Id_Ville] [int] NULL ,
    	[Ville] [varchar] (100) COLLATE French_CI_AS NULL ,
    	[VilleSalt] [varchar] (100) COLLATE French_CI_AS NULL ,
    	[Telephone] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[Portable] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[Fax] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[Email] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[Sexe] [varchar] (1) COLLATE French_CI_AS NULL ,
    	[Date_Naissance] [datetime] NULL ,
    	[Lieu_Naissance] [varchar] (50) COLLATE French_CI_AS NULL ,
    	[Id_Situation] [int] NULL ,
    	[Nb_Enfants] [int] NULL ,
    	[Id_Profession] [int] NULL ,
    	[Id_Secteur] [int] NULL ,
    	[Id_Provenance] [int] NULL ,
    	[Date_Inscription] [datetime] NULL ,
    	[Date_Last_Modif] [datetime] NULL ,
    	[Date_Inactivation] [datetime] NULL ,
    	[Date_Reactivation] [datetime] NULL ,
    	[zzzid_Verification] [int] NULL ,
    	[zzzid_erreur_nom] [int] NULL ,
    	[zzzid_erreur_region] [int] NULL ,
    	[zzzid_erreur_departement] [int] NULL ,
    	[zzzid_erreur_pays] [int] NULL ,
    	[zzzid_erreur] [int] NULL ,
    	[zzzid_erreur_commune] [int] NULL ,
    	[zzzCP_commune] [varchar] (20) COLLATE French_CI_AS NULL ,
    	[zzzId_Pays] [int] NULL ,
    	[zzzid_departement] [int] NULL ,
    	[zzzid_region] [int] NULL ,
    	[zzzMotif_Inactivation] [varchar] (1000) COLLATE French_CI_AS NULL ,
    	[zzzId_Jonction] [int] NULL ,
    	[zzzage] [int] NULL ,
    	[zzzId_Statut] [int] NULL 
    ) ON [PRIMARY]
    GO
     
     CREATE  INDEX [IX_MEMBRES_Nom] ON [dbo].[MEMBRES]([Nom]) ON [PRIMARY]
    GO
     
     
    CREATE TRIGGER [UPD_Date_Modif] ON [dbo].[MEMBRES] 
    FOR UPDATE
    AS
    UPDATE MEMBRES SET Date_Last_Modif = GetDate()
    FROM MEMBRES M
    JOIN INSERTED I ON I.Id_Locad = M.Id_Locad
    Et voilà la structure de la Vue ListingVille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT G.NMC_ID AS IdDecoupage, G.Numero_Decoupage AS CPVille, G.NMC_LIBELLE AS NomVille, 
    D.NMC_ID AS IDDep, D.NMC_LIBELLE AS NomDepartement, 
    R.NMC_ID AS IDRegion, R.NMC_LIBELLE AS NomRegion FROM GeoPolitique G
    INNER JOIN GeoPolitique D ON D.NMC_NIVEAU = 3 AND D.NMC_BG < G.NMC_BG AND D.NMC_BD > G.NMC_BD
    INNER JOIN GeoPolitique R ON R.NMC_NIVEAU = 2 AND R.NMC_BG < G.NMC_BG AND R.NMC_BD > G.NMC_BD
    WHERE G.NMC_NIVEAU = 5
    La table GeoPolitique de cette vue est faite selon le tuto de SQLPro sur la gestion des arbres intervallaires.

    Pour le plan d'exécution, je sais pas envoyer une image sur un topic.

    Merci pour votre aide.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    je suis pas expert mais je crois que le TOP n'est pas quelque chose de recommandé, ni de sûr (il prendrait des lignes au hasard sans suivre de tri)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Ajoute un index sur le champ personne et remplace le not in par une jointure normalisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT TOP 1000000
    M.Id_Locad, M.id_membre,M.zzzage,
    M.Nom, M.Prenom, M.Adresse, M.Complement, V.NomVille, V.CPVille,
    M.Telephone, M.Portable, M.Date_Inscription, M.Date_Inactivation, M.Date_Last_Modif,
     
    ISNULL(DATEDIFF(yyyy, M.Date_Naissance, GETDATE()),0) AS Age, 
    M.Sexe, M.Id_Profession, M.Id_Secteur, M.Id_Situation, M.Nb_Enfants, M.Id_Provenance,M.email,M.date_naissance,
     
    V.IDDep AS Departement, V.IdRegion AS Region
    FROM MEMBRES M JOIN devbv.Centrale.dbo.ListingVille V 
             ON V.IdDecoupage = M.Id_Ville 
                             JOIN MOTIF_MEMBRE MO
             ON M.Id_Locad<>MO.Id_Membre  
    ORDER BY Nom, Prenom
    Pour ajouter les pièces jointes, allez à gérer les pièces-jointes.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL Server : problème de requête sur server lié oracle
    Par stever50 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/03/2008, 12h06
  2. Problème de perfs sur MySQL
    Par Daily dans le forum Outils
    Réponses: 11
    Dernier message: 12/09/2007, 17h11
  3. Problème de perfs sur Oracle 8i
    Par Daily dans le forum Oracle
    Réponses: 17
    Dernier message: 12/10/2006, 10h09
  4. Réponses: 11
    Dernier message: 19/06/2006, 16h54
  5. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54

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