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

Requêtes MySQL Discussion :

Indexer le nom de la table lors d'une requête


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut Indexer le nom de la table lors d'une requête
    Bonjour tous le monde,

    J'ai X tables dans mon serveur SQL:
    - Table_1
    - Table_2
    .
    .
    - Table X

    J'ai une procédure stockée avec un paramètre d'entré : @Index INT

    Ce que j'aimerais pouvoir faire c'est sélectionner dans le "FROM" de ma requête la table en fonction de l'index.

    du style:
    SELECT * FROM Table_+@Index WHERE ...

    Quelqu'un aurait une idée de la syntaxe à appliquer ?

    Merci!

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Pour ce genre de besoin, du SQL dynamique est la solution sauf que...
    • il faudra aussi probablement dynamiser la clause WHERE, il est en effet très peu probable que les mêmes colonnes de filtrage existent dans toutes les tables
    • ce type d'approche vous contraint à faire un select *, ce qui n'est jamais bon : résultat instable et requête peu performante


    Quel est le but de la manoeuvre ? Il y a sans doute d'autres approches plus simples et plus performantes

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Si toutes ces tables ont la même structure, cela démontre un problème de modélisation. Les données devraient toutes être regroupées en une seule table avec une colonne supplémentaire pour l'indice.
    En attendant, toujours en supposant que ces tables ont la structure, on peut créer une vue pour émuler la structure idéale :
    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 view mavue
    as  select  1   as indice
            ,   tbl.colonne_1
            ,   ...
            ,   tbl.colonne_n
        from    table_1 as tbl
    union all
        ...
    union all
        select  n   as indice
            ,   tbl.colonne_1
            ,   ...
            ,   tbl.colonne_n
        from    table_n as tbl
    Ainsi la requête précédente est beaucoup plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  colonne_1
            ,   ...
            ,   colonne_n 
    FROM    mavue   
    WHERE   indice = @Index
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    En faite le problème est que chaque table fait déjà plus d'un million de lignes.
    Et en tous il y a 101 tables.

    Je sais pas si le serveur va accepter de rassembles toutes les lignes et surtout cela risque de prendre beaucoup de temps non?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Pour ce genre de besoin, du SQL dynamique est la solution sauf que...
    • il faudra aussi probablement dynamiser la clause WHERE, il est en effet très peu probable que les mêmes colonnes de filtrage existent dans toutes les tables
    • ce type d'approche vous contraint à faire un select *, ce qui n'est jamais bon : résultat instable et requête peu performante


    Quel est le but de la manoeuvre ? Il y a sans doute d'autres approches plus simples et plus performantes

    C'est quoi le SQL dynamique? désolé je suis novice en SQL ^^
    Le but est un peu complexe a expliquer mais mes différents tableaux représentent chacun le débit passant dans différent circuit d'air en fonction de position de réglage.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    En ce cas on tombe sur le travers suppose par al1__24 : plusieurs tables de même structure.
    Soit une grosse erreur de modélisation.
    À corriger si possible sinon cf. sa proposition.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Peugg Voir le message
    En faite le problème est que chaque table fait déjà plus d'un million de lignes.
    Et en tous il y a 101 tables.

    Je sais pas si le serveur va accepter de rassembles toutes les lignes et surtout cela risque de prendre beaucoup de temps non?

    Que croyez vous ???

    Un vieux proverbe US dit "garbage in garbage out"
    Traduisible par "si t'as de la merde en entrée, t'auras de la merde en sortie" !
    Votre merde en entré c'est ces 101 tables
    votre merde en sortie ce sera l'UNION de toutes ces tables.

    MySQL étant de très loin le SGBD le plus pourri en terme de performances et capacité, je vous souhaite bien du plaisir !

    Pour info dans SQL Server , traiter des tables de 100 millions de ligne c'est courant, simple et extrêmement rapide, grâce notamment aux index columnstore dont MySQL est dépourvu...
    https://docs.microsoft.com/fr-fr/sql...l-server-ver15
    https://www.mssqltips.com/sqlservert...ta-warehouses/

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

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    Je réponds à la question posée.
    Voici un exemple de SQL DYNAMIC dans une procédure stocké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
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `tab_1`
    --------------
     
    --------------
    CREATE TABLE `tab_1`
    (  `id`    integer unsigned NOT NULL auto_increment Primary key,
       `mess`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
    --------------
     
    --------------
    INSERT INTO `tab_1` (`mess`) VALUES
      ('Un'),('Deux'),('Trois'),('Quatre'),('Cinq')
    --------------
     
    --------------
    select * from `tab_1`
    --------------
     
    +----+--------+
    | id | mess   |
    +----+--------+
    |  1 | Un     |
    |  2 | Deux   |
    |  3 | Trois  |
    |  4 | Quatre |
    |  5 | Cinq   |
    +----+--------+
    --------------
    DROP TABLE IF EXISTS `tab_2`
    --------------
     
    --------------
    CREATE TABLE `tab_2`
    (  `id`    integer unsigned NOT NULL auto_increment Primary key,
       `mess`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
    --------------
     
    --------------
    INSERT INTO `tab_2` (`mess`) VALUES
      ('One'),('Two'),('Three'),('Four'),('Five')
    --------------
     
    --------------
    select * from `tab_2`
    --------------
     
    +----+-------+
    | id | mess  |
    +----+-------+
    |  1 | One   |
    |  2 | Two   |
    |  3 | Three |
    |  4 | Four  |
    |  5 | Five  |
    +----+-------+
    --------------
    DROP PROCEDURE IF EXISTS `search`
    --------------
     
    --------------
    CREATE PROCEDURE `search`
    ( in in_index  integer,
      in in_mess   varchar(255)
    )
    DETERMINISTIC
    NO SQL
    BEGIN
      SET @req = concat("select * from tab_", in_index, " where mess = '", in_mess, "';");
     
      PREPARE            stmt FROM @req;
      EXECUTE            stmt;
      DEALLOCATE PREPARE stmt;
    END
    --------------
     
    --------------
    call `search` (1, 'trois')
    --------------
     
    +----+-------+
    | id | mess  |
    +----+-------+
    |  3 | Trois |
    +----+-------+
    --------------
    call `search` (2, 'five')
    --------------
     
    +----+------+
    | id | mess |
    +----+------+
    |  5 | Five |
    +----+------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    A part votre demande, je dirai que vous avez une problème de modélisation de votre base de données.
    Il existe une solution qui consiste à partitionner vos tables.
    A lire : https://dev.mysql.com/doc/refman/8.0...titioning.html

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Que croyez vous ???

    Un vieux proverbe US dit "garbage in garbage out"
    Traduisible par "si t'as de la merde en entrée, t'auras de la merde en sortie" !
    Votre merde en entré c'est ces 101 tables
    votre merde en sortie ce sera l'UNION de toutes ces tables.

    MySQL étant de très loin le SGBD le plus pourri en terme de performances et capacité, je vous souhaite bien du plaisir !

    Pour info dans SQL Server , traiter des tables de 100 millions de ligne c'est courant, simple et extrêmement rapide, grâce notamment aux index columnstore dont MySQL est dépourvu...
    https://docs.microsoft.com/fr-fr/sql...l-server-ver15
    https://www.mssqltips.com/sqlservert...ta-warehouses/

    A +

    Justement j'aimerai éviter de devoir réunir les tables sachant que je peux pointer sur une seule (je choisis la table en fonction d'un paramètre de réglage)

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.

    Je réponds à la question posée.
    Voici un exemple de SQL DYNAMIC dans une procédure stocké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
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `tab_1`
    --------------
     
    --------------
    CREATE TABLE `tab_1`
    (  `id`    integer unsigned NOT NULL auto_increment Primary key,
       `mess`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
    --------------
     
    --------------
    INSERT INTO `tab_1` (`mess`) VALUES
      ('Un'),('Deux'),('Trois'),('Quatre'),('Cinq')
    --------------
     
    --------------
    select * from `tab_1`
    --------------
     
    +----+--------+
    | id | mess   |
    +----+--------+
    |  1 | Un     |
    |  2 | Deux   |
    |  3 | Trois  |
    |  4 | Quatre |
    |  5 | Cinq   |
    +----+--------+
    --------------
    DROP TABLE IF EXISTS `tab_2`
    --------------
     
    --------------
    CREATE TABLE `tab_2`
    (  `id`    integer unsigned NOT NULL auto_increment Primary key,
       `mess`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
    --------------
     
    --------------
    INSERT INTO `tab_2` (`mess`) VALUES
      ('One'),('Two'),('Three'),('Four'),('Five')
    --------------
     
    --------------
    select * from `tab_2`
    --------------
     
    +----+-------+
    | id | mess  |
    +----+-------+
    |  1 | One   |
    |  2 | Two   |
    |  3 | Three |
    |  4 | Four  |
    |  5 | Five  |
    +----+-------+
    --------------
    DROP PROCEDURE IF EXISTS `search`
    --------------
     
    --------------
    CREATE PROCEDURE `search`
    ( in in_index  integer,
      in in_mess   varchar(255)
    )
    DETERMINISTIC
    NO SQL
    BEGIN
      SET @req = concat("select * from tab_", in_index, " where mess = '", in_mess, "';");
     
      PREPARE            stmt FROM @req;
      EXECUTE            stmt;
      DEALLOCATE PREPARE stmt;
    END
    --------------
     
    --------------
    call `search` (1, 'trois')
    --------------
     
    +----+-------+
    | id | mess  |
    +----+-------+
    |  3 | Trois |
    +----+-------+
    --------------
    call `search` (2, 'five')
    --------------
     
    +----+------+
    | id | mess |
    +----+------+
    |  5 | Five |
    +----+------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    A part votre demande, je dirai que vous avez une problème de modélisation de votre base de données.
    Il existe une solution qui consiste à partitionner vos tables.
    A lire : https://dev.mysql.com/doc/refman/8.0...titioning.html

    @+
    Super merci ! c'est ce que je cherchais

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Si ce n'est pas trop tard, c'est pourtant la bonne solution : une seule table.
    Avec 101 tables, il faut gérer les modifications dans 101 structures, multiplier les index, les vues, complexifier la gestion des privilèges...
    Aucun intérêt.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bonjour!

    J'ai du mal a voir ce que ça change en terme de performance d'avoir plusieurs tables d'1M de lignes et en cibler une, ou d'avoir une grande table de 101M de lignes comme vous le préconisez avec toutes les lignes où l'on ciblerai une certaine plage de 1M de ligne pour chercher la solution.

    Si j'ai le temps j'essaierai les deux.


    Merci à vous pour votre aide

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Si ce n'est pas trop tard, c'est pourtant la bonne solution : une seule table.
    Avec 101 tables, il faut gérer les modifications dans 101 structures, multiplier les index, les vues, complexifier la gestion des privilèges...
    Aucun intérêt.
    Mais une fois la table crée et implémentée dans le serveur, elle ne bougera plus jamais.

    elle sera utilisé ensuite pour une "simple" recherche pour récupérer des consignes de réglage à envoyer sur une machine par rapport à d'autre consigne

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Peugg Voir le message
    Bonjour!

    J'ai du mal a voir ce que ça change en terme de performance d'avoir plusieurs tables d'1M de lignes et en cibler une, ou d'avoir une grande table de 101M de lignes comme vous le préconisez avec toutes les lignes où l'on ciblerai une certaine plage de 1M de ligne pour chercher la solution.

    Si j'ai le temps j'essaierai les deux.


    Merci à vous pour votre aide
    Ca change plein de choses.

    Déjà, la plupart des tables possèdent des clefs étrangères référençant des identifiants qui sont dans d'autres tables.
    A l'inverse d'autres tables peuvent aussi posséder des FK qui référencent la PK de ces 101 tables !
    Avoir 101 tables interdit ce fonctionnement et donc compromet l'intégrité référentielle. Ce qui est très grave !
    La première qualité d'une base de données est de garantir l'intégrité de son contenu, pour ce faire, l'intégrité référentielle est obligatoire

    De plus, qui peut dire qu'une table n'évoluera jamais, perosnne. Une base de données vit en fonction des demandes des gestionnaires, des contraintes réglementaires ou autres contingences extérieures à votre organisation et que vous ne maîtrisez pas.

    Enfin, quand le volume va encore augmenter dans les tables, vous allez créer une 102eme puis 103eme puis...

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    La table est une "Photographie" de débit passant par différents circuits par rapport au réglage d'ouverture de ces circuits
    Les 101 tables correspondes au 0-100% d'ouverture de l'extraction d'air, donc une table par %
    c'est un peu une utilisation détourné de SQL dans le sens ou on ne gère pas la base de donnée. C'est la seule méthode qui nous garantie des temps d'exécution court (~ 1s sur SQL / 7-8s sur un exécutable fortran)

    Donc il n'y aura pas de 102 ou 103 tables, ni de modification de ces tables.

    A la base je m'étais dis qu'en séparent les données ça serait plus facile au serveur de me renvoyer les résultats s'il cherche dans une plus petite table, après je connais très peu cette techno ^^

  16. #16
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Rechercher une ligne particulière dans une table de 100 millions de lignes sur un critère discriminant et indexé ne prend que quelques nanosecondes
    Un modèle évolutif est toujours préférable à un modèle figé même si aujourd'hui vous ne voyez pas de perspective d'évolution, vous ne pouvez pas garantir que ce ne sera jamais nécessaire.
    Argument supplémentaire : pour consolider des résultats sur différents pourcentages, cette architecture nécessite des requêtes UNION (ALL) et du coup vous balayerez bien l'ensemble du volume tous pourcentages confondus.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je n'ai pas encore eu le temps d'intégrer la base de donnée mais on a déjà généré toute les solutions d'après notre modèle. Je pense effectivement que pour la suite je vais donc fusionner tous les tableaux en un.

    Merci pour votre aide

    A bientôt

  18. #18
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Si c'est dans un contexte d'entreprise, je suis très surpris que personne n'ai poussé des hauts cris en voyant arriver 101 tables de même structure...

    En principe, l'architecture de la BDD doit être validée par les services compétents (DBA, architecte...) bien avant que les applications soient développées, justement pour éviter ce genre d'impair.

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    C'est un peu particulier comme fonctionnement, ce n'est pas un outils qui va être utilisé sur un réseau, mais uniquement en local dans un IPC et sera utilisé pour le paramétrage d'une machine. (trouver les réglages de la machine par rapport a des consignes simplifiées)

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

Discussions similaires

  1. Taille des Indexes et nom de la table
    Par Kain-sc dans le forum SQL
    Réponses: 2
    Dernier message: 13/01/2010, 15h48
  2. Erreur rencontrée lors d'une requête ALTER TABLE
    Par benoît82 dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/02/2008, 15h59
  3. [MySQL] Donner un autre nom de champ lors d'une requête SELECT
    Par greg13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/01/2008, 17h30
  4. Lien entre tables lors d'une requête
    Par thom30 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/12/2007, 15h49
  5. Mauvais noms de colonnes lors d'une requête
    Par nmathon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/04/2004, 07h27

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