データウィンドウ(MS SQL 2000データベース)を更新して、他のすべてのテーブルの情報へのアクセスレベルを制御する新しいテーブルを追加しました。あまり細かく説明することなく、新しいテーブルにはユーザーIDと、アクセス可能なアカウントIDのリストがあります。 DataWarehouse内のすべてのテーブルに対応するビューが作成されており、ユーザーにこれらのビューを使用してデータにアクセスするよう依頼しているため、最初のAccess Controlテーブルのアクセスレベルに基づいてビューが制限されます。ユニークでないキーテーブルのMS SQLデータウェアハウスのパフォーマンスの改善
これらのビューの多くを使用する複雑なクエリでは、明らかに同じアクセス制御テーブルが何度も結合されるという問題があります。このリソースへのアクセスを制御していないクエリが多いため、現時点ではこれについて多くのことを行うことはできません。したがって、アクセス速度を最適化するためにボックス自体を変更する必要があります。
Datawarehouseは一晩だけ更新されます。正直なところ、この時間は無関係です。挿入速度は必要ありません。選択するだけです。必要があれば、インデックスを再構築することもできます。
この非一意レコード(UserID列)に索引を付けているにもかかわらず、実行計画トレースを実行すると、Index Seekの代わりにTable Scansが使用されていることがわかります。インデックス。これは恐ろしいパフォーマンスの影響をもたらしています。先週の実行には1分、実行には10分、もう1時間は1時間というクエリがありました。
このテーブルを参照する他のすべてのビューは、インデックスされていない列(アカウントID)に結合され、次に返されるアカウント数はユーザーのNT IDに基づいて除外されます。
パフォーマンスを向上させるために私たちができることについてお聞かせください。短期間(インフラストラクチャ側で変更可能なもの)、または長期間(データベーススキーマの変更など)は、データベースの使用方法の性質を考慮しても簡単に行うことはできません。
ありがとうございます!
デビッド