*最初の注意として、私は自分のサーバーへの読み取りアクセスしか持っていません。ただ、参考までにたくさん出てくるようですが...
サーバー:DB2(6.1)for i(IBM)
19mil行のテーブルで実行しているクエリがあります(設計はしていません。クエリを実行するだけです)。戻り時間がもう少し合理的になるようにこのクエリを整理するまで、戻りデータを10行(*)に制限してきました。
基本的な設計では、WEEK_ID列とCATEGORY列を使用して、週ごとに販売する製品のカテゴリに関するデータを取得する必要があります。これがサンプルコードです(いくつかの重要なビット####が出ています)。
SELECT WEEK_ID, CATEGORY
FROM DWQ####.SLSCATW
INNER JOIN DW####.CATEGORY
ON DWQ####.SLSCATW.CATEGORY_NUMBER = DW####.CATEGORY.CATEGORY_NUMBER
WHERE WEEK_ID
BETWEEN 200952 AND 201230 --Format is year/week
GROUP BY WEEK_ID, CATEGORY
その最後の行をコメントアウトすると、254ミリ秒で100行を取り戻すことができます。私がその行を私のリターンに戻すと、私が待つのに我慢していたよりも時間がかかります:-)。(私が待っていた最長時間は10分です。)
この質問には2つの部分があります。最初の質問は非常に初歩的なものです:これは正常ですか?私が凝縮しようとしているのは、50のカテゴリー(大まかに)と140週間(またはそれくらい)です。これは1900万行から凝縮するための多くの情報であることに気付きましたが、クエリを返される10行に制限することで、時間を最小限に抑えることができると期待していました。
そして、私が完全なn00bでなく、実際にこれに数分かかることはない場合、SQLの何が問題になっていますか?
WHEREステートメントの最適化をグーグルで検索しましたが、何も見つからないようです。すべてのリンクと説明は大歓迎です。
そのような初心者の投稿についてお詫びします...私たちは皆どこかから始めなければなりませんよね?
(*)SQLExplorer、私のIDE、SquirrelSQLのEclipse実装を使用します。