名前がNULLではないと仮定するSELECT * FROM foo
よりも速く実行されるのだろうか?SELECT * FROM foo WHERE name LIKE '%'
ドキュメントへの参照はありますか?
名前がNULLではないと仮定するSELECT * FROM foo
よりも速く実行されるのだろうか?SELECT * FROM foo WHERE name LIKE '%'
ドキュメントへの参照はありますか?
どちらのクエリも、テーブル全体をスキャンします。name が NOT NULL であるかどうかが重要になるのは、(1) name にインデックスがあり、(2)非常にまばらな、非常にまれな状況だけです。そうして初めて、PostgreSQL は名前インデックスからレコードを検索することを検討します。
他のすべての状況では、このSQLFiddleは、LIKE バージョンがチェックする必要があるフィルターを追加することを示しています。LIKE '%'
PostgreSQL には、妥当と思われる限り、null 以外の varchar 列に対して削除する最適化はありません。
QUERY PLAN
Seq Scan on foo (cost=0.00..15.00 rows=1000 width=62)
QUERY PLAN
Seq Scan on foo (cost=0.00..17.50 rows=1000 width=62)
Filter: ((name)::text ~~ '%'::text)
はい。LIKE を使用すると、単純に行を返すだけでなく、データベースで全テーブル スキャンを実行する必要があります。