我想知道是否会比假设 name 不是 NULLSELECT * FROM foo
执行得更快?SELECT * FROM foo WHERE name LIKE '%'
对文档的任何引用?
我想知道是否会比假设 name 不是 NULLSELECT * FROM foo
执行得更快?SELECT * FROM foo WHERE name LIKE '%'
对文档的任何引用?
您的两个查询都将扫描整个表。name 是否为 NOT NULL 仅在极少数情况下很重要,即(1) name 上有一个索引,(2)它非常非常稀疏。只有这样 PostgreSQL 才会考虑从名称索引中查找记录。
在所有其他情况下,此SQLFiddle显示 LIKE 版本添加了一个过滤器,必须对其进行检查。PostgreSQL 没有LIKE '%'
针对非空 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 还需要数据库进行全表扫描。