多くの場合、適切なインデックスを持たない大きなテーブルに対してクエリを実行する必要があります。そこで、DBAにそのようなインデックスを作成するように依頼します。彼が最初に行うことは、テーブル統計とインデックススペースのサイズを確認することです。
「インデックスはすでにテーブルよりも大きい」ため、多くの場合、代替ソリューションを見つけるように言われます。彼は、インデックスをデータよりも小さくする必要があると感じています。「本でインデックスを見たことがありますか?本自体よりもはるかに小さいので、テーブルインデックスがどうあるべきか」と私に言ったからです。
彼の哲学は正しいとは思わないが、彼は主任DBAであり、私は開発者だから挑戦できない。クエリにインデックスが必要な場合は、読み取り不可能で維持できないSPを作成する「回避策」を見つけるのではなく、インデックスを作成する必要があります。
必要な列のみを選択しています。問題は、日付でフィルタリングしているため、エンジンが列を一致させるために必ずテーブルスキャンを実行することです。クエリは、統計を収集するために1日に1回、夜に実行されますが、実行には15分かかります(別の厳格なルールがあります。手順は3分以上かかりません)。
DBAはインデックスの統計を教えてくれました。そのテーブルには約10個のインデックスがあり、そのうち6個しか使用されていませんでした(統計では4個のヒットがゼロでした)。これは20人以上の開発者が参加する大規模なシステムです。インデックスは何らかの理由で作成されたため、おそらく使用されなくなりました。
SQL Server 2008をサポートする必要があります。これは、テストDBが実行されているためです。ただし、クライアントはすべて2014年と2016年です。