1

我想知道是否会比假设 name 不是 NULLSELECT * FROM foo执行得更快?SELECT * FROM foo WHERE name LIKE '%'

对文档的任何引用?

4

2 回答 2

4

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

在所有其他情况下,此SQLFiddle显示 LIKE 版本添加了一个过滤器,必须对其进行检查。PostgreSQL 没有LIKE '%'针对非空 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 回答