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

  1. #1
    Membre à l'essai
    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
    Points : 23
    Points
    23
    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 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 801
    Points
    30 801
    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
    Points : 926
    Points
    926
    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 à l'essai
    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
    Points : 23
    Points
    23
    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
    Points : 926
    Points
    926
    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
    21 770
    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 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    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/ * * * * *

  7. #7
    Membre actif

    Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2008
    Messages : 167
    Points : 265
    Points
    265
    Par défaut
    Les rowid doivent être dans l ordre d insertion

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par a.presles Voir le message
    Les rowid doivent être dans l ordre d insertion
    Ou bien pas.

  9. #9
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Si la table est une IOT, d'une certaine façon les éléments seront ordonnés dans la table (selon l'index qui l'organise, bien sûr).
    Mais quoi qu'il en soit, même si les éléments sont "insérés dans l'ordre", cela ne garantit en rien qu'un SELECT les récupère dans cet ordre, s'il n'a pas de clause ORDER BY.

    Dans quel but posez-vous ces questions, en fait : y a-t-il un objectif à réaliser derrière, auquel cas il est plus simple de décrire ce que vous souhaitez faire ?

+ 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