- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:countのスピード)
countスピードの向上方法
このQ&Aのポイント
- MySQL/PostgreSQLを使用しているが、初めてOracleを触る経験がある。70万件のデータのテーブルでのcount(*)の実行に7秒近くかかり、count(hoge)でも大差がない。テーブルの構造やインデックスの貼り方に問題はなさそうだが、どのような改善策があるか教えてほしい。
- Oracleを始めて触っており、70万件のテーブルでのcount(*)の実行に7秒近くかかる。テーブルの構造はシンプルで、インデックスも貼っているが劇的な速度改善が見られない。これはオラクルの特徴なのか、改善策はあるのか教えてほしい。
- MySQL/PostgreSQLからOracleに移行したが、70万件のデータのテーブルでのcount(*)の実行に7秒近くかかってしまう。テーブルの構造やインデックスを見直したが改善が見られない。オラクルでのcountの速度向上策を教えてほしい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「select count(*) from テーブル名」で実行した場合、「全表スキャン」となってしまいます。テーブルがたとえ70万件あっても、対象ブロックはHWMまでアクセスしてしまうため、テーブルによっては遅い場合があります。 こういった場合、ヒントを使って「高速全索引スキャン」でアクセスすることでパフォーマンスをあげることができます。 たとえばTABLE名(hoge)、主キー(hoge_pk)だった場合 SELECT /*+ INDEX_FFS(hoge hoge_pk) */ count(*) from hoge; という感じで書きます。/*+ */で囲んでいる箇所がヒントになります。 #コメントと紛らわしいですが。 INDEX_FFSは初期化パラメータのDB_FILE_MULTIBLOCK_READ_COUNT に影響を受けるのでALTER SESSIONなどでDB_FILE_MULTIBLOCK_READ_COUNTを変更すると結果に差がでると思います。