-5

私はインデックスに不慣れで、大きな問題を抱えています。

クエリSELECT * FROM TABLEが長すぎます。

インデックスを使用してより迅速な結果を得るためにこれを最適化することは可能ですか?

WHEREインデックスが節などで役立つことは知っていますが、これはSELECT *?

私は 200,000 件以上のレコードを持っていますが、もちろんそれらはすべて一意の ID を持っています。

ID 列を持つ 1 つのインデックスを作成するだけで十分ですか、それとも最善の戦略は何ですか?

4

3 に答える 3

3
  1. フィルター処理するすべての列に対して、この列のみを含むインデックスを追加します。

  2. DB2 では、FETCH FIRST N ROWS ONLY を追加して、返される行数を制限できます。http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2 を参照してください。 .doc.admin%2Ffrstnrw.htm . これは、20万行すべてが検出される前に最初の N 行が返されるため(検索基準がインデックス化されている場合) 、可能な限り高速になります。

  3. 20 万行をフェッチするのはばかげています。誰もそれらすべてを見ることはないからです。行数を計算し (実際には COUNT などを使用してすばやく実行できます)、最初の N 行のみを表示したい場合があります。上記を参照してください。重要なのは、行自体を確認することではなく、一致する行の数を確認することです。きっと!または、あなたたちは100%正気ではありません。

于 2012-10-09T12:37:34.617 に答える
3

25 列のインデックスを作成しないでください。複数のインデックスを作成します。おそらく各列に 1 つです。ユーザーがすべての列をフィルター処理できる場合は、フィルターが OR ではなく AND であることを確認してください。フィルター間で OR を使用すると、インデックスも機能しません。

最初にテストとしてこれを試してください:

SELECT * FROM Ticket WHERE Name = 'AAA'
-- Take length of time that takes

CREATE INDEX IX_TICKET_NAME ON Ticket(Name)

SELECT * FROM Ticket WHERE Name = 'AAA'
-- Seel how long it takes now

パフォーマンスが大幅に向上する場合は、yes インデックスが役立ちます。次に、他のどの列にインデックスが必要かを調べます。

編集: ユーザーがすべてのフィルターを空白のままにすることを許可しないでください。少なくともいくつかのフィルターを適用する必要があることを示す警告を提供します。または、それができない場合、すべてのフィルターが空白の場合は、結果を 100 行または何かに制限します

于 2012-10-09T11:55:32.007 に答える
1

あなたが参照している一意の ID は、インデックス付きのキーである可能性が高いです。非常に多くのデータを選択してアプリケーションで作業するのは、特に Web ページを作成している場合は、高速ではありません。あなたは試してみたいかもしれません:

  • データの一部を選択し、部分的に処理します。
  • アプリケーションで結果を表示する前に、データベースで sql を使用してできるだけ多くのデータ処理を行います。
于 2012-10-09T11:43:36.313 に答える