2010-11-25 18 views
0

私は主キー のデフォルトのインデックスをオフにするにはどうすればよい私は(ソート)すべての私のテーブルがインデックス化させたいいけないが、彼らはあなたがすることができ、主キー主キー - SQL2005

答えて

1

を持っている必要がありますプライマリキーインデックスをNONCLUSTEREDと定義して、プライマリキーに従ってテーブル行を並べ替えるのを防ぎますが、関連するインデックスを一切持たずにプライマリキーを定義することはできません。

+0

インデックスなしでプライマリキーを定義することはできますが、実際はお勧めできません。 –

+0

@Mitch Wheat - うーん...私はそれを知らなかった。暗黙的にインデックスを作成するのではなく、PK制約を作成するサンプル文を投稿できますか? –

+1

@ミッチ小麦 - 私はかなりあなたができないと確信しています。インデックス構造は、SQL Serverが一意性プロパティをチェック/保持する方法です。 –

0

SQL Serverがプライマリキーとユニークキーを実装する方法は、これらの列にインデックスを付けることです。したがって、索引なしで主キー(または一意制約)を持つことはできません。

これらのインデックスを実装するために非クラスタ化インデックスを使用するようにSQL Serverに指示します。テーブルにノンクラスタード・インデックスだけがある場合(またはインデックスがまったくない場合)は、ヒープがあります。これがあなたが実際に望んでいることはまれです。

テーブルにクラスタ化インデックスがあるというだけで、テーブルの行がこのようなインデックスで定義された「順序」で返されることは決してありません。つまり、行はです。通常注文は実装のクォークです。


そして、実際のコードは次のようになります。

CREATE TABLE T (
    Column1 char(1) not null, 
    Column2 char(1) not null, 
    Column3 char(1) not null, 
    constraint PK_T PRIMARY KEY NONCLUSTERED (Column2,Column3) 
) 
1

テーブルは常にソートされていないされている - そこには「デフォルト」の順序がテーブル用ではなく、オプティマイザは、または1つの場合は、インデックスを使用することを選択しない場合があります存在する。

SQL Serverでは、キーを実装するためにインデックスが効果的に使用されます。クラスタ化インデックスと非クラスタ化インデックスのいずれかを選択できます。

0

「私のテーブルをすべて並べ替えるのは嫌だ」とはどういう意味ですか?列が入力された順序で表示されるようにするには、その順序を格納するフィールドを持つ(または多くのトランザクションがない場合は時間がかかる) 。その場合、最高のパフォーマンスを得るには、そのフィールドにクラスタード・インデックスを作成することが必要になります。
最大パフォーマンスを得るには、クラスタ化されていないPK(productIdなど)とautonumber_or_timestampフィールドにクラスタ化された一意のインデックスが存在する可能性があります。
しかし、それは本当にモデル化しようとしている現実にあります。あなたの質問にはこれに関する情報がほとんど含まれていません。 DB設計は抽象的ではない。