2012-03-14 16 views
2

SQLテーブルがIDで注文されていても、私のウェブサイトはDATEまでに投稿を表示します。 IDの順序はDATEの順序と必ずしも同じではないため、ORDER BY 'DATE'でクエリを実行します。SQL - 主キー、クラスタードインデックス、自動インクリメント

SQL表の例:

---------------------------- 
| ID | DATE    | 
---------------------------- 
| 1 | 2011-10-20 00:00:00 | 
| 2 | 2012-10-20 00:00:00 | 
| 3 | 2010-10-20 00:00:00 | 
| 4 | 2011-09-20 00:00:00 | 
---------------------------- 

To query I use: SELECT * FROM `table` ORDER BY 'DATE'; 

私の質問:

  1. クラスタ索引やテーブルの主キーは、DATE列だった場合は、クエリのパフォーマンスに利益をもたらすだろうか?

  2. プライマリキーではない場合、ID列を自動インクリメントにすることはできますか?私が何をしたいか

は(DATEクラスタ索引または主キーを作ることによって、私は可能だと思うもの)できるだけ速くクエリを作るだけでなく、独自の自動を持つように各ポストを許可しています増分ID。私はDATEをプライマリキーにしようとしましたが、「オートコラムが1つしかなく、キーとして定義する必要があります」というエラーが表示されました。

+1

'ORDER BY 'DATE''は、DATE列の値ではなく、定数文字列リテラルDATEでソートするため、結果を並べ替えません。カラム名に予約語を使用しているので、 '' 'やバッククォート(' table'で行ったやり方)を使用して引用符を付ける必要があります。 –

答えて

3

日付を主キーとして定義するのではなく、フィールドにインデックスを追加します。ユニークな、必要な場合。非主キーフィールドにオートインクリメントを付けることは可能ですが、自分で試してみると最高の答えが得られます。

< - EDIT - >

コメントの質問に答えるために、私はその悪い考えを言うことはできませんが、日付は常にうるさいです。一度は、UTCまたは現地の日付を使用するかどうかを決定し、夏時間がプログラムにどのように影響するかをプレビューし、アプリケーションの寿命のある時点で日付更新の必要性があるかどうかを予見しなければなりません。私はむしろそれを忘れて、唯一の自動生成されたキーに行きます。 日付をPKとして使用する場合は、タイムスタンプを使用して2番目のシーケンス列を避けることができます。

私はtechtarget.commade2mentor.comに主キーとして日付の詳細を発見しました。

+0

私はクラスタード・インデックスの日付を作ることをお勧めしますか? – supercoolville

+0

@supercoolvilleそれは長すぎたので編集として投稿に私の答えを追加しました:) –

0

インデックスに入る値が順序付けられていないと、インデックスにはいいです。必須ではないがいい。インデクスがオートインクリメントの列のみである場合、インデックスを再構築するたびに最初から不均衡なツリーになってしまいます.1つのリーフに追加されるだけなので、新しいデータが追加されると常に不均衡になることが保証されます(インデックスページがいっぱいになるまで)。

自動増分フィールド(主にSybase、MS SQL、その他のすべての主キーがクラスタ化されています)のクラスタ化インデックスの場合、比較的頻繁なインデックス再構築を行うことをお勧めします。私の哲学は最も一般的なスキャンに集中することです。だから私はID列に私のプライマリキーを設定するかもしれないが、私はDATEでクラスターをしたいので、私は選択したテーブルから日付を選択するか、日付順に並べ替えます。オフディスク。

関連する問題