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

Langage SQL Discussion :

Vitesse de recherche sur bdd géante


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de bricechris
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Points : 57
    Points
    57
    Par défaut Vitesse de recherche sur bdd géante
    Bonsoir,

    J'aimerais savoir le temps que met une base de donnée SQL pour extraire une entrée parmi un million d'autres (au sens propre).
    Par exemple, retourner la ville du membre "Jeanjacques59", parmi près de 1 000 000 d'autres membres d'un site de voyage.

    J'ai du mal à concevoir la vitesse à laquelle un serveur peut aller.

    D'avance merci.
    Brice.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Si c'est correctement indexé, ce sera très rapide.

    J'ai fait le test sur mon ordinateur personnel, donc pas un serveur, pas de SAN, sur Oracle 10g Express.

    Création des objets :
    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
    create table test_scan_1m
    (
        id_test    number(7) not null,
        nom1       varchar2(10),
        nom2       varchar2(50),
        constraint pk_test_scan_1m
          primary key (id_test)
          using index
    );
     
     insert /*+ APPEND */ into test_scan_1m (id_test, nom1, nom2)
     select level, dbms_random.string('a', 10), dbms_random.string('a', 50)
       from dual
    connect by level <= 1e6;
     
    commit;
     
    create index i_nom1
    on test_scan_1m (nom1);
    Bloc d'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    declare
        rtest_scan_1m test_scan_1m%rowtype;
     
    begin
        dbms_output.put_line('Date début : ' || to_char(systimestamp, 'hh24:mi:ss.ff'));
     
        select id_test, nom1, nom2 into rtest_scan_1m
          from test_scan_1m
         where nom1 = 'fSrNvYyxoH'; -- j'ai regardé le contenu de la table pour prendre une valeur au pif
     
        dbms_output.put_line('Date fin   : ' || to_char(systimestamp, 'hh24:mi:ss.ff'));
    end;
    /
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Date début : 01:57:20.375000000
    Date fin   : 01:57:20.390000000
    Soit 150 ms.

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Oh Waldar, tu n'aimes pas SQL*Plus, ou est-ce par soucis de précision ou c'est juste pour le plaisir d'écrire du PL ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> set timing on
    SQL> select view_name, owner from dba_views where view_name = 'DBA_OBJECTS';
     
    VIEW_NAME                      OWNER
    ------------------------------ ------------------------------
    DBA_OBJECTS                    SYS
     
    EcoulÚ : 00 :00 :00.00
    SQL>

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Je n'aime pas SQL*Plus
    Les outils des années 80, non merci !

  5. #5
    Membre du Club Avatar de bricechris
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Points : 57
    Points
    57
    Par défaut
    Merci Waldar pour la réponse.

    150 ms, je trouve ça tout de même très gros comme délai pour trouver une info sur 1 million. Enfin... pour un ordinateur, évidemment.
    A cette cadence, cela voudrait dire que pour extraire 100 membres habitant dans le coin de Montrouville, il faudrait... 15 secondes !?

    C'est normal que ça soit si long ou c'est parce que tu as utilité ton pc ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Non ça ne marche pas comme ça, ce n'est pas linéaire heureusement sinon on ne s'en sortirait pas.

    Au boulot, sur une table de 25M lignes, la requête entre 16 ms et 50 ms que ce soit pour un code ou pour 10 codes.

  7. #7
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Je suis pas très fort avec les nombres... mais j'ai l'impression que le résultat de Waldar ne faisait pas 150ms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Date début : 01:57:20.375000000
    Date fin   : 01:57:20.390000000
    0.015 secondes (si tu multiplies par 100, ça fait 1,5 secondes )

    (En plus de ne pas aimer les vrais outils des années 80 !)

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Bien vu, c'était 15 ms !

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    Sous SQL Server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE test_scan_1m
    (
        id_test    INT IDENTITY NOT NULL PRIMARY KEY ,
        nom1       varchar(10),
        nom2       varchar(50),
    ); 
     
    INSERT INTO test_scan_1m 
    SELECT LEFT(CONVERT(VARCHAR(36), NEWID()), 10), NEWID()
    GO 1000000;
     
    CREATE INDEX i_nom1
    ON test_scan_1m (nom1);
    GO
    Le test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SET STATISTICS TIME ON;
     
    SELECT *
    FROM   test_scan_1m
    WHERE  nom1 = '23E64237-0';
    Amusez-vous bien !

    A +

    PS : tout dépend du serveur...

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

Discussions similaires

  1. [MySQL] Recherche sur cinq caractères dans champ Bdd
    Par casimirine dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/05/2013, 11h20
  2. Vitesse de recherche sur une DB de 364000 mots
    Par freddyev dans le forum VB.NET
    Réponses: 19
    Dernier message: 19/04/2011, 20h47
  3. [MySQL] Message d' erreur mysql dans requete de recherche sur la bdd
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/05/2010, 15h33
  4. Réponses: 4
    Dernier message: 13/07/2009, 15h37
  5. [MySQL] recherche sur la bdd avec une variable type tableau
    Par akara dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/03/2009, 11h11

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