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 :

2 millions de lignes et ça rame :(


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut 2 millions de lignes et ça rame :(
    Saluté ...
    j'ai un sérieux problème avec une bdd de deux millions de lignes (10 colonnes)
    j'ai fait un moteur de recherche qui fait un like %search% sur toutes les colonnes mais mes résultats rament ..

    ex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Select top 100 * from tblrbu2
       WHERE (
       NOCNTINT LIKE '%12354%'
       OR CLERIB LIKE '%12354%'
       OR LBCLI LIKE '%12354%'
       OR LBBATHAB LIKE '%12354%'
       OR LBVOIADR LIKE '%12354%'
       OR CDPST LIKE '%12354%'
       OR CDCOMDST LIKE '%12354%' ) AND 1=1 ORDER BY NOCNTINT ASC
    45 secondes !!!

    pourtant j'ai mis des index sur chaque colonne et choisi des tailles au plus proches de celles des données !

    help please help !

  2. #2
    Membre émérite
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Par défaut
    Je connais pas ta bdd mais ta requete est plutot complexe et lourde avec tous ces like, plus un TOP 100 et un order by.
    D'autre part, je pense que je vais anticiper la réponse d'un admin du forum en te disant que le TOP100, c'est pas top
    Tout combiné, ca donne un requete plutot lourde donc normal que ca prenne du temps.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 265
    Par défaut
    Et puis je ne suis pas persuadé que les index soient utilisés sur les LIKE.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Citation Envoyé par Reskibil Voir le message
    Je connais pas ta bdd mais ta requete est plutot complexe et lourde avec tous ces like, plus un TOP 100 et un order by.
    D'autre part, je pense que je vais anticiper la réponse d'un admin du forum en te disant que le TOP100, c'est pas top
    Tout combiné, ca donne un requete plutot lourde donc normal que ca prenne du temps.
    Essaye de faire des UNION en faisant un distinct sur la clé voir ce que ca donne, mais bon 45 secondes pour 2 millions de lignes avec 10 colonnes ( quel type de donnees ?) ca me semble correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select * 
    from table
    where champs1 like '%12345%'
    UNION
    select * 
    from table
    where champs2 like '%12345%'
    UNION
    select * 
    from table
    where champs3 like '%12345%'
    .........................................
    ........................................

  5. #5
    Membre Expert Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Par défaut
    +1 pour voyageur

    de plus 2Mlignes avec de la recherche multicolonnes et un order by en 45 sec c'est pas trop mal...

  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
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Une requête LIKE '%valeur%' ne peut en aucune cas utiliser un index. La lecture est donc purement séquentielle.
    De plus le top 100 combiné au ORDER BY implique de lire TOUTE LA TABLE.

    Pour faire de telles requêtes performantes, il faut utiliser des index rotatifs, seule solution à des LIKE ayant des jokers de part et d'autre.

    D'autre part votre modèle ne semble pas normaliser car la recherche d'une même information dans de multiples colonnes révèle souvent un défaut de normalisation. Donc base à remodéliser si vous voulez des performances.

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

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut
    Merci merci pour vos réponses !!!
    j'ai appris plein de trucs pour le coup !

    D'autre part votre modèle ne semble pas normaliser car la recherche d'une même information dans de multiples colonnes révèle souvent un défaut de normalisation. Donc base à remodéliser si vous voulez des performances.
    c'est clair ... mais c'est un client qui nous a filé une base accès à deux francs ... un espèce de gros tableau excel ...

    -----
    Sinon j'ai trouvé une solution qui carbure pas mal au final ! l'indexation full text ! c'est assez monstrueux comme gain de performances ! je suis passé à des requettes à 2/3 secondes avec plusieurs mots clefs ... donc vraiment efficace ! d'ailleurs je ne comprends pas pourquoi tous les champs de textes ne sont pas indexés comme ça !
    merci pour toutes les infos en tout cas !
    @+

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut
    en revanche une petite question

    pourquoi quand je fais une requête de ce type

    select top 200 * from tblrebusdap2 where Contains(*,'"*toto*"') AND Contains(*,'"*1070*"')

    il va me rechercher toto n'importe ou dans le texte mais me rechercher 1070 uniquement comme début de texte ...si 1070 est au milieu d'une valeur contenue dans une colonne de type varchar par exemple eh bien il ne le trouve pas

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par CaviarNAS Voir le message
    pourtant j'ai mis des index sur chaque colonne et choisi des tailles au plus proches de celles des données !
    Avec des LIKE '%12345%', les index ne sont sans doute pas utilisés. Vérifie le plan d'exécution.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/09/2007, 15h14
  2. Réponses: 1
    Dernier message: 08/03/2007, 11h47
  3. 100 million de lignes, 34 Go : partition ou autre ?
    Par Greg07 dans le forum Administration
    Réponses: 9
    Dernier message: 24/10/2006, 19h02
  4. Transferer 500 millions de lignes
    Par Kikoune dans le forum Oracle
    Réponses: 4
    Dernier message: 26/05/2006, 18h09
  5. [SELECT sur 16 millions de lignes] délai très grand
    Par localhost dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/11/2004, 18h04

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