[解決済み】PostgreSQLがインデックス付きカラムに対してシーケンシャルスキャンを実行するのはなぜですか?
2022-04-16 12:36:13
質問
1つのテーブル、1つのインデックス、1つのクエリという非常にシンプルな例です。
CREATE TABLE book
(
id bigserial NOT NULL,
"year" integer,
-- other columns...
);
CREATE INDEX book_year_idx ON book (year)
EXPLAIN
SELECT *
FROM book b
WHERE b.year > 2009
が与えてくれる。
Seq Scan on book b (cost=0.00..25663.80 rows=105425 width=622)
Filter: (year > 2009)
なぜインデックススキャンを実行しないのですか? 私は何を見逃しているのでしょうか?
解決方法は?
SELECTがテーブルの全行数の約5-10%以上を返す場合、インデックススキャンよりもシーケンシャルスキャンの方がはるかに高速になります。
これは、インデックススキャンには 数 各行に対する IO 操作(インデックスで行を検索し、ヒープからその行を取得する)。ディスク上のブロック(ページ)には複数の行が含まれるため、1回のIO操作で複数の行を取得することができるからです。
しかし、SELECT *の場合、そのようなDBMSがquot;インデックスのみのスキャンを行うことはほとんどないでしょう)。
関連
-
pgAdmin for postgreSQLでサーバーのデータをバックアップする方法
-
Postgresqlのセルフインクリメントidをキーにした場合の重複問題の解決
-
PostgreSQLのデータベースでLIKE文の効率を確保する方法(推奨)
-
PostgreSQL] アクティブリンクのあるデータベースを削除する方法
-
[解決済み] リレーションシップのパーミッションが拒否されました
-
[解決済み】PostgreSQLのエラーです。Fatal: ロール "username" が存在しません。
-
[解決済み] Postgresqlで「挿入無視」と「重複キー更新」(SQLマージ)をエミュレートする方法は?
-
[解決済み] PostgreSQLでトリガーを一時的に無効にするにはどうすればよいですか?
-
[解決済み] PostgreSQL の全コンテンツを削除する
-
[解決済み] 外部キーはクエリーのパフォーマンスを向上させるか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PostgreSQLのテーブルをパーティション分割する3つの方法
-
Centos環境でのPostgresqlのインストールと設定、環境変数の設定Tips
-
PostgreSQLがバキュームテーブルの情報を収集する必要があることを発見する方法
-
PostgreSQLのデータベースでLIKE文の効率を確保する方法(推奨)
-
PostgreSQLで時間指定タスクを実装する4つの方法
-
[解決済み] 未知語からテキストへの変換関数の検索に失敗しました。
-
[解決済み] Postgres ENUMデータ型またはCHECK CONSTRAINT?
-
[解決済み] 'ユーザー "postgres" のパスワード認証に失敗しました'
-
[解決済み] PostgreSQLのクエリを記録する方法は?
-
[解決済み】PostgreSQLで行が存在するかどうかを最速でチェックする方法