実行速度の遅いすべてのクエリのパフォーマンス調整に取り組んでいます。私はOracleが初めてで、SQLサーバーをしばらく使用しています。誰かがクエリを調整して実行を高速化するのを手伝ってくれますか?
Select distinct x.a, x.b from
from xyz_view x
where x.date_key between 20101231 AND 20160430
ヘルプや提案に感謝します
実行速度の遅いすべてのクエリのパフォーマンス調整に取り組んでいます。私はOracleが初めてで、SQLサーバーをしばらく使用しています。誰かがクエリを調整して実行を高速化するのを手伝ってくれますか?
Select distinct x.a, x.b from
from xyz_view x
where x.date_key between 20101231 AND 20160430
ヘルプや提案に感謝します
まず、なぜDISTINCT
そこにあるのかを調べることから始めます。私の経験では、多くの開発者DISTINCT
は独自の結果が必要であることを知っているため、 に取り組みますが、実際にはなぜまだそれを取得していないのかを理解していません。
次に、列のクラスター化インデックスは、この特定のクエリには理想的です。これは、すべての行をディスク上で隣り合わせに配置し、サーバーが一度にすべてを取得できるためです。問題は、他の用途に適したクラスター化インデックスが既にあるため、それが不可能な場合があることです。その場合は、日付列で非クラスター化インデックスを試して、その結果を確認してください。
インデックス作成には幅広い影響があるため、単一のクエリを使用してインデックス作成を決定することはお勧めできません。
DISTINCT
が本当に必要であることを確認している限り、このクエリを最適化するためにこれ以上できることはありません。
[NOLOCK]
コミットされていないページの読み取りが問題にならない場合は、FROM
句に a を追加できます。
ただし、時刻が挿入されているかどうかも分析できます。挿入されている場合は、本当に関連性がありますか。時刻を真夜中に設定しないと、インデックスが改善されます。
私が見た最大の改善点は、テーブルの日付フィールドを 3 つのフィールド (日付部分ごとに 1 つ) に分割したことです。これにより、パフォーマンスが大幅に向上します。