データベース エンジンのスケーラビリティとパフォーマンスに関する機能強化
データのパーティション分割機能が、テーブルとインデックスに関するネイティブのパーティション分割機能によって強化されています。アプリケーションの同時実行機能も、新しいスナップショット分離レベルと、1 つの接続で複数のアクティブな結果セットを取得する機能によって向上しています。
スケーラビリティとパフォーマンスに関する機能強化
プラン ガイド
新しいシステム ストアド プロシージャ sp_create_plan_guide を使用すれば、クエリ テキストの直接変更が不可能な場合や望ましくない場合に、クエリ ヒントをクエリにアタッチすることでクエリのパフォーマンスを最適化することができます。プラン ガイドは、サード パーティ ベンダによって配置されたデータベース アプリケーションのクエリの小さなサブセットが期待どおりに動作しない場合に便利です。
詳細については、「プラン ガイドを使用した配置済みアプリケーションのクエリの最適化」を参照してください。
スナップショット分離レベル
スナップショット分離レベルは、行のバージョン管理を実装したものであり、現在のトランザクションを開始した時点でのデータベース内のデータのビューをユーザーに示します。スナップショット トランザクションは、復旧時を除けば、読み取り操作を保護するためのロックを取得しません。スナップショット分離レベルによって、読み取り専用アプリケーションのロックやブロックの問題を最小限に抑えることができます。
詳細については、「データベース エンジンでの行のバージョン管理に基づく分離レベル」を参照してください。
相関関係にある datetime 列の統計
データベースの新しい SET オプションである DATE_CORRELATION_OPTIMIZATION を有効にすれば、datetime 列が相関関係にある 2 つのテーブルを結合し、述語に日付の制限を指定するクエリのパフォーマンスを改善できます。
詳細については、「相関した datetime 列にアクセスするクエリの最適化」を参照してください。
強制的なパラメータ化
データベースの新しい SET オプションである PARAMETERIZATION を FORCED に設定することによって、1 つのデータベースで実行するすべてのクエリをパラメータ化するように指定できます。特定のデータベースでは、強制的なパラメータ化によって、クエリの再コンパイルの頻度が低くなるので、パフォーマンスが向上する可能性があります。
詳細については、「強制パラメータ化」を参照してください。
統計の非同期更新
データベースの新しい SET オプションである AUTO_UPDATE_STATISTICS_ASYNC を有効にすれば、クエリの応答時間を予測しやすくなります。このオプションを有効にすると、古い統計はバックグラウンドのワーカー スレッドによって更新待ちのキューに入れられるので、統計の更新を開始したクエリは、統計の更新の完了を待たずにすぐにコンパイルされます。
詳細については、「インデックス統計」を参照してください。
保存される計算列
計算列を PERSISTED として設定すると、その列の値がテーブルのデータ ページに格納されます。これにより、計算を集中的に行う列の取得速度を上げることができます。
詳細については、「計算列」を参照してください。
複数のアクティブな結果セット (MARS)
SQL Server 2005 では、1 つの接続で複数のステートメントが同時に結果セットを返すことができるようになりました。旧バージョンの SQL Server の場合は、各接続で実行して結果セットをアクティブに返すことができるのは一度に 1 つのステートメントに限られ、すべての結果セットを取得するまで、新しいステートメントを実行することはできませんでした。
詳細については、「バッチ実行環境と MARS」を参照してください。
非キー列を非クラスタ化インデックスに含める機能
インデックス キーの一部ではない列を非クラスタ化インデックスに含めることができます。非キー列を含めると、クエリの実行時にデータ行にアクセスしなくても、インデックスから必要なデータをすべて取得できる場合があり、クエリの実行速度が上がる可能性があります。また、最大 16 個のキー列、最大 900 バイトのインデックス キー サイズという現在のインデックス サイズに関する制限を超えることも可能になります。
詳細については、「付加列インデックス」を参照してください。
インデックスのロックの粒度
CREATE INDEX と ALTER INDEX の新しいオプションである ALLOW_ROW_LOCKS と ALLOW_PAGE_LOCKS を使用して、インデックスのロックのレベルを制御できます。
詳細については、「インデックス オプションの設定」を参照してください。
XML データ型の列のインデックス
XML データ型で格納する XML ドキュメントやフラグメントのサイズは非常に大きい場合があります。インデックスが作成されていない場合、データベース エンジンは、参照のたびにドキュメントやフラグメントを細かく調べる必要があります。XML データ型の列にインデックスを定義すれば、データベース エンジンによるドキュメントやフラグメントの処理が効率的になります。
詳細については、「xml データ型列のインデックス」を参照してください。
インデックス付きビューに関する機能強化
SQL Server 2005 のクエリ オプティマイザは、旧バージョンのときよりも多くの種類のクエリをインデックス付きビューに結び付けられるようになりました。これには、スカラ式、スカラ集計およびユーザー定義関数、値の間隔式、等値条件などを含んだクエリが含まれます。
詳細については、「インデックス付きビューのデザイン」を参照してください。
インデックス付きビューの定義にも、スカラ集計およびユーザー定義関数を含めることが可能になりました。ただし、いくらかの制限があります。
詳細については、「インデックス付きビューの作成」を参照してください。
新しいクエリ ヒント
最適なクエリ プランの作成に使用できる 4 つのクエリ ヒントが追加されています。
RECOMPILE を使用すると、SQL Server は、クエリの実行後に、そのクエリのために生成されたプランを破棄します。つまり、同じまたは類似のクエリが次に実行されるときには新しいクエリ プランが生成されます。コンパイルと実行のたびに変数の値が大きく変わるクエリの場合は、RECOMPILE が便利です。ストアド プロシージャに組み込まれているクエリのサブセットだけを再コンパイルする場合は、そのストアド プロシージャの作成時に、このヒントを WITH RECOMPILE オプションの代わりに使用できます。
OPTIMIZE FOR を使用すると、SQL Server は、このヒントで指定する以外の方法では不明であるローカル変数の値として、クエリのコンパイルと最適化の実行時に指定されたある特定の値を使用します。
USE PLAN を使用すると、SQL Server は、クエリのために既存のクエリ プランを使用します。クエリの実行に時間がかかるプランの場合、そのプランより優れたプランが既に存在しているのであれば、USE PLAN クエリ ヒントを使用できます。
PARAMETERIZATION では、クエリ プランをコンパイルするときにクエリをパラメータ化するかどうかを指定します。このヒントをプラン ガイドの中で使用すると、データベースの SET オプションである PARAMETERIZATION の現在の設定が上書きされます。
詳細については、「クエリ ヒント (Transact-SQL)」を参照してください。
ラージ オブジェクトの削除と再構築
128 個を超えるエクステントを使用するテーブルやインデックスを削除または再構築する場合、SQL Server 2005 は、トランザクションのコミット時まで、実際のページの割り当て解除と、それに関連したロックの設定を保留にします。このようなロックの回避は、プロセスを論理フェーズと物理フェーズに分割することによって可能になっています。
詳細については、「ラージ オブジェクトの削除と再構築」を参照してください。
拡張性の高い共有データベース
この新しい機能を使用すると、読み取り専用のデータベースを、ストレージ エリア ネットワーク (SAN) 経由で複数の SQL Server 2005 のサーバー インスタンスにアタッチできます。拡張性の高い共有データベースでは、レポート サーバーやボリュームに汎用のハードウェアを使用してデータベースをスケールアウトでき、アップグレードも容易になります。
詳細については、「スケーラブルな共有データベースの概要」を参照してください。