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

Oracle Discussion :

L'ordre des enregistrements d'une table [11g]


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 18
    Par défaut L'ordre des enregistrements d'une table
    Bonjour,
    Je voudrais savoir l'ordre dans lequel sont insérés les lignes dans une table.
    C'est a dire quand, on insère une ligne dans la table :
    - sera t-elle a la fin de la table ?
    -sera t-elle au début de la table ?
    -sera t-elle au milieu des autres lignes ?
    Je sais compter sur vous !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Par définition, une table n'est pas ordonnée... donc le SGBD place les nouvelles lignes où bon lui semble, en tenant compte éventuellement de directives qui lui auraient été imposées (index cluster, partitions, ...) mais qui n'influeront pas sur l'ordre des lignes retournées par une commande SELECT sans clause ORDER BY
    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.

  3. #3
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Par défaut
    Bonjour,

    Les lignes sont insérées dans les blocs disponibles qui font partis de la Free List.

    Pour comprendre, il faut avoir qq notions d'architecture Oracle.

    Lorsque tu crées une table, Oracle gère un segment qui est lui-même composé au moins d'un extent, lequel est un ensemble de blocs contigus.

    Ces blocs vides sont candidats à l'insertion de lignes et font partis de la Free List (la liste des blocs disponibles).

    Au fur et à mesure des Insert, le bloc va se remplir jusqu'à son Pct Free (qui vaut 10 % par défaut). Donc qu'en il y aura moins de 10 % d'espace disponible, le bloc sera considéré comme plein et quittera la Free List. Oracle se servira du prochain bloc de la Free List pour insérer les lignes suivantes.

    Pour que le bloc regagne la Free List, il faut effacer des lignes par des Delete. Et lorsque l'espace disponible dépassera le seuil du Pct Used (40 % par défaut), Oracle considérera que le bloc peut à nouveau contenir des lignes et le replacera dans la Free List.

    Voilà le mode de fonctionnement en gros.

    Pour bien comprendre ces mécanismes, il faut s'intéresser à toutes les propriétés physiques de la table (segment, extent, bloc) et au paramètre de stockage (Min extent, Pct Free, Pct Used...).

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 18
    Par défaut
    Alors dans ce cas ,est il possible d'afficher les enregistrements par ordre d'insertion croissante ?

  5. #5
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Par défaut
    Non.

    Si tu veux afficher tes lignes de données par ordre d'insertion croissant, c'est à toi de gérer cela, en utilisant un simple compteur comme une séquence Oracle par exemple, ou bien la nouvelle clause IDENTITY disponible depuis Oracle 12c.

  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 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par rouardg Voir le message
    Non.

    Si tu veux afficher tes lignes de données par ordre d'insertion croissant, c'est à toi de gérer cela, en utilisant un simple compteur comme une séquence Oracle par exemple, ou bien la nouvelle clause IDENTITY disponible depuis Oracle 12c.
    Une SEQUENCE comme un IDENTITY ne garantie pas non plus l'ordre d'insertion. En effet est-ce vous sûr qu'un lot de lignes inséré par une seule requête SQL aura des valeurs d'auto incrément exactement dans l'ordre du lot de ligne primal ?*

    D'autre part il est toujours possible de remettre les compteurs SEQUENCE comme IDENTITY à zéro, comme à n'importe quelle valeur, voire de forcer les valeurs de séquence ou d'identity.

    Le seule moyen de garantir le tri dans l'ordre d'insertion est d'insérer les valeurs une par une et jamais en lot et faire appel à une donnée d'horodatation suffisamment précise stockée dans une colonne particulière de la table.

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

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

Discussions similaires

  1. Taille des enregistrements d'une table
    Par Stbaurl dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 11/07/2006, 09h19
  2. [Débutant]Ordre des champs dans une table
    Par goony dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2006, 12h05
  3. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  4. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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