PostgreSQL会优化LIKE'%'吗?

时间:2012-11-12 20:44:03

标签: sql postgresql sql-execution-plan

我想知道SELECT * FROM foo是否会比SELECT * FROM foo WHERE name LIKE '%'执行得更快,假设名称为非空?

对文档的任何引用?

2 个答案:

答案 0 :(得分:4)

您的两个查询都将扫描整个表格。 name是否为NULL只在极少数情况下才有用,其中(1)名称为索引,(2)非常,非常稀疏。只有这样,PostgreSQL才会考虑从名称索引中查找记录。

在所有其他情况下,此SQLFiddle显示LIKE版本添加了必须检查的过滤器。 PostgreSQL没有针对非空varchar列删除LIKE '%'的优化,尽管看起来很合理。

表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)

答案 1 :(得分:0)

是。除了简单地返回行之外,使用LIKE还需要数据库执行全表扫描。