2010-01-13 6 views

Répondre

7

L'ordre dans lequel les lignes sont stockées n'a pas vraiment d'importance. En fait, les tables SQL n'ont aucun ordre. Si l'ordre vous importe, vous devez interroger à l'aide d'une clause ORDER BY.

+0

merci, mais lorsque vous insérez 'un', insérez 'deux', insérez 'trois', dans sqlserver2000, c'est peut-être deux, un, trois. En mysql, ça doit être un, deux, trois. T T – Keating

+0

Pourquoi? Est-ce garanti et documenté dans MySQL, ou est-ce que ça semble être comme ça? –

+0

lorsque vous insérez 2, puis insérez 3, puis insérez 1, dans mysql vous verrez 2,3,1 comme l'ordre que vous insérez. Mais dans sqlsever2000 cela peut ne pas. – Keating

3

Il n'y a aucune garantie sur l'ordre des résultats d'une instruction select, sauf si vous ajoutez une clause ORDER BY. Vous pourriez obtenir les résultats dans l'ordre d'insertion, mais ce n'est pas garanti.

1

Si vous avez un index sur la table, il peut sembler que vos données sont ordonnées d'une manière inattendue. Normalement, vous aurez juste une colonne d'identité comme clé primaire de substitution, ce qui signifie que vos données insérées apparaîtront dans l'ordre si vous faites un select *, mais si vous avez des index sur d'autres colonnes, les données peuvent être classées différemment lorsque vous sélectionnez *.

+2

Par Index, j'espère que vous voulez dire index clusterisé. Et pour l'autre index de colonne, vous voulez dire l'index non groupé. Juste pour clarifier ...... –

0

Vous pouvez contrôler l'ordre physique en créant un index en cluster sur ces colonnes. Un seul index cluster est autorisé par table. L'index de cluster s'assure que lorsque vous exécutez SELECT vous obtiendrez toujours des données dans l'ordre qui a été défini lors de la création de l'index de cluster.

+0

C'est une idée fausse commune. Cochez ceux-ci: http://consultingblogs.emc.com/davidportas/archive/2006/05/30/4007.aspx http://sqlblog.com/blogs/hugo_kornelis/archive/2006/12/31 /Beatles-vs-Stones.aspx –

+0

L'ordre physique d'un cluster signifie que l'enregistrement de cette table est regroupé sur le disque et ne signifie pas qu'ils apparaissent comme dans abc sur le disque. Il existe plusieurs optimisations basées sur le type de données, etc. que sqlserver/orcale effectue au niveau du disque. Mais cluster regrouper des enregistrements de groupement de façon conscriptive il existe toujours un index/BTREE pour déterminer l'ordre correct à l'intérieur du cluster. Mais cela prend moins de temps pour que sqlserver lise les données du disque. Vous pouvez le comparer avec le processus de défragmentation dans hardrive qui amène le cluster de fichiers ensemble pour une lecture rapide. – affan

+0

Avez-vous réellement lu mes liens? Vous pouvez contrôler la commande physique uniquement au moment de la création/recréation de l'index clusterisé. Par la suite ou entre les deux, seul l'ordre logique est garanti par SQL Server. Cela peut ou non conduire à la fragmentation de l'index au fil du temps en fonction de ce que vous choisissez d'être l'index clusterisé. "Il existe plusieurs optimisations basées sur le type de données, etc. que sqlserver effectue au niveau du disque" Que voulez-vous dire par là? –

Questions connexes