2011-08-20 2 views
2

Ayant travaillé avec SQL Server pendant longtemps, je suis habitué à penser que la table en cluster (table avec index clusterisé) est généralement un meilleur choix que la table tas. Maintenant, je travaille aussi avec Oracle et je ne comprends pas vraiment pourquoi leurs tables sont en tas par défaut. De mon expérience, je peux dire qu'il y a un nombre limité de cas où les tables devraient être tas (encore une fois, j'ai surtout traité avec SQLServer). Est-ce qu'Oracle a une bonne raison de "forcer" (en forçant je veux dire que CREATE TABLE sans spécifier organization index crée un segment de mémoire contrairement à SQLServer qui crée par défaut une table en cluster) pour utiliser les tables de segments de mémoire?Tables IOT vs Heap dans Oracle

[Mise à jour]
des éclaircissements sur SQLServer - je aurais pu mal utilisé "par défaut" pour décrire le comportement SQL Server; Je suis conscient qu'il crée un index clusterisé si la clé primaire est spécifiée dans CREATE TABLE. Mon point ici est que je ne dois pas spécifier PK est en cluster.
[/ Mise à jour]

En outre, il y a beaucoup de bons articles sur les tables contre des tas en cluster SQL Server, et je me demande dans quelle mesure il peut être appliqué à Oracle.

Toute information est grandement appréciée.

Merci.

+0

SQL Server ne crée pas de table avec un index clusterisé par défaut. Une table sera stockée physiquement en tant que HEAP, sauf si un index cluster est défini dans l'instruction create table. (Note: Par défaut, une clé primaire sera implémentée en tant qu'index groupé sur cette table, sauf indication contraire explicite.) –

+0

Je ne comprends pas comment cela contredit ce que j'ai dit dans la section mise à jour ... 'CREATE TABLE table1 (id int not null identité (1,1) PRIMARY KEY) 'crée un index cluster sur' id' sauf si je spécifie qu'il n'est pas en cluster. N'est-ce pas un comportement par défaut? – a1ex07

Répondre

2

Je travaille beaucoup avec Oracle et dans mon expérience IOT (= BTree-like) peuvent avoir un coût qui surpondère ou neutralisent les avantages possibles ...

« regroupés » et IOT/Btree sont différentes bêtes dans Oracle terminologie - Je ne connais pas très bien SQL Server mais je lis que "clustered" signifie quelque chose de différent de ce que cela signifie dans Oracle ...

Ceci est plus une décision au cas par cas ... bien que j'aime pour coller avec la valeur par défaut et optimiser au besoin ...

Certains liens avec des informations concernant Oracle/Index:

+0

Merci pour les liens, je vais les vérifier. Je sais que clustered signifie différent dans SQL Server et Oracle, je suis juste utilisé pour la terminologie sql server; Désolé pour ça. – a1ex07

5

L'un des avantages historiques d'Oracle a été sa ligne-l mécanisme de verrouillage evel où les verrous sont stockés dans la ligne de données (plutôt que dans la mémoire ou une structure séparée). Cela signifie qu'il n'a jamais été nécessaire de "minimiser" le nombre de verrous dans une transaction, et aucun concept d'escalade des verrous de ligne à la page (ou verrous de table). Son mécanisme de concurrence et de récupération lui permet également d'écrire des données non validées sur le disque plutôt que de les conserver en mémoire.

Elles atténuent les mêmes problèmes qui peuvent également être résolus par des tables structurées en cluster/btree.En bref, les tables de segments dans Oracle ne présentent pas les mêmes problèmes que les tables de segments de mémoire dans d'autres bases de données, de sorte que vous ne bénéficiez pas des mêmes avantages de la co-localisation de données connexes dans les mêmes blocs physiques.