SELECT COUNT(*)で全件検索を避ける方法について
- SELECT COUNT(*)を実行すると、表の全件検索が行われます。全件検索されないようにする方法はありますか?
- 行単位の排他を使用している場合、SELECT COUNT(*)でデータ件数を求める処理では、表の全件検索が行われます。
インデックスだけを使用してデータ件数を求めるためには、以下のどちらかの回避方法を実施してください。
-
排他単位を、ページ単位に変更する
「動作環境ファイル」の「R_LOCKパラメーター」の指定を、以下のように変更します。R_LOCK=NO
-
イルシデーションロック機能により、資源を占有しないSELECT文に変更する
SELECT文に以下のように占有モードを指定します。SELECT COUNT(*) FROM 表名 WITH OPTION LOCK_MODE(NO LOCK)
インデックスを参照すればデータ件数を求められる場合でも、行単位の排他を行っている場合は、必ず表の行に排他をかけるため、表の行を検索することでデータ件数を求めています。
一方、ページ単位の排他の場合、または排他を行わない場合、排他獲得のために表にアクセスする必要がありません。そのため、インデックスだけのアクセスでデータ件数を求めています。 -
製品・サービス区分 | Symfoware | ||||
---|---|---|---|---|---|
製品・サービス情報 |
|
||||
アンサー種別 | 技術サポート |