ビューのCount(*)はテーブルのCount(*)に比べ遅くなる

SQL Server ではビューのCount(*)はテーブルのCount(*)に比べ遅くなります。

遅いSQL

select cnt=count(id) from [ビュー名]

速いSQL

select cnt=count(id) from [テーブル名]

原因

ビューの複雑さ

  • 結合 (JOIN): ビューが複数のテーブルを結合している場合、COUNT(*) を実行する際に結合処理が必要となり、処理時間が増加します。
  • フィルタリングや計算: ビューがフィルタリング条件や計算を含んでいる場合、これらの追加処理がカウント操作を遅くする要因となります。

インデックスの利用

テーブルに対して直接 COUNT(*) を実行する場合、特定のインデックスが利用され効率的にカウントできることがあります。 一方、ビューを介するとインデックスの利用が制限され、パフォーマンスが低下することがあります。

最適化の限界

データベースのクエリーオプティマイザーは、ビューの定義を展開して最適化しますが、複雑なビューでは最適化が十分に行われず、 パフォーマンスに影響を与える場合があります。

AuthorPortraitAlt
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
作成日: 2010-11-06
Copyright © 1995–2025 iPentec all rights reserverd.