1

名前がNULLではないと仮定するSELECT * FROM fooよりも速く実行されるのだろうか?SELECT * FROM foo WHERE name LIKE '%'

ドキュメントへの参照はありますか?

4

2 に答える 2

4

どちらのクエリも、テーブル全体をスキャンします。name が NOT NULL であるかどうかが重要になるのは、(1) name にインデックスがあり、(2)非常にまばらな、非常にまれな状況だけです。そうして初めて、PostgreSQL は名前インデックスからレコードを検索することを検討します。

他のすべての状況では、このSQLFiddleは、LIKE バージョンがチェックする必要があるフィルターを追加することを示しています。LIKE '%'PostgreSQL には、妥当と思われる限り、null 以外の varchar 列に対して削除する最適化はありません。

テーブル SELECT * すべての行

QUERY PLAN
Seq Scan on foo (cost=0.00..15.00 rows=1000 width=62)

テーブル SELECT * `LIKE '%'` を含むすべての行

QUERY PLAN
Seq Scan on foo (cost=0.00..17.50 rows=1000 width=62)
Filter: ((name)::text ~~ '%'::text)
于 2012-11-12T21:40:44.103 に答える
0

はい。LIKE を使用すると、単純に行を返すだけでなく、データベースで全テーブル スキャンを実行する必要があります。

于 2012-11-12T20:52:03.387 に答える