我想知道SELECT * FROM foo
是否会比SELECT * FROM foo WHERE name LIKE '%'
执行得更快,假设名称为非空?
对文档的任何引用?
答案 0 :(得分:4)
您的两个查询都将扫描整个表格。 name是否为NULL只在极少数情况下才有用,其中(1)名称为索引,(2)非常,非常稀疏。只有这样,PostgreSQL才会考虑从名称索引中查找记录。
在所有其他情况下,此SQLFiddle显示LIKE版本添加了必须检查的过滤器。 PostgreSQL没有针对非空varchar列删除LIKE '%'
的优化,尽管看起来很合理。
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)
答案 1 :(得分:0)
是。除了简单地返回行之外,使用LIKE还需要数据库执行全表扫描。