SELECT COUNT(*)で全件検索を避ける方法について

SELECT COUNT(*)を実行すると、表の全件検索が行われます。全件検索されないようにする方法はありますか?
行単位の排他を使用している場合、SELECT COUNT(*)でデータ件数を求める処理では、表の全件検索が行われます。
インデックスだけを使用してデータ件数を求めるためには、以下のどちらかの回避方法を実施してください。
  • 排他単位を、ページ単位に変更する
    「動作環境ファイル」の「R_LOCKパラメーター」の指定を、以下のように変更します。

     R_LOCK=NO


  • イルシデーションロック機能により、資源を占有しないSELECT文に変更する
    SELECT文に以下のように占有モードを指定します。

     SELECT COUNT(*) FROM 表名 WITH OPTION LOCK_MODE(NO LOCK)


インデックスを参照すればデータ件数を求められる場合でも、行単位の排他を行っている場合は、必ず表の行に排他をかけるため、表の行を検索することでデータ件数を求めています。
一方、ページ単位の排他の場合、または排他を行わない場合、排他獲得のために表にアクセスする必要がありません。そのため、インデックスだけのアクセスでデータ件数を求めています。

製品・サービス区分 Symfoware
製品・サービス情報
対象製品 Symfoware Server (Native Interface)
プラットフォーム Windows, Solaris, Linux
アンサー種別 技術サポート
このページの先頭へ