给定一个大约100万的表。具有整数类型的列
id
和向量类型的 embedding
的行(2000),我在 pgAdmin 查询工具中运行了以下查询:
CREATE INDEX ON table USING hnsw (embedding vector_cosine_ops);
无论我运行什么 SELECT 查询,在使用
EXPLAIN ANALYZE
作为查询前缀时,我都没有看到正在使用的索引。
看到@ankane的评论“按表达式排序[...]不会使用索引”和“Postgres仅支持对运算符进行ASC顺序索引扫描”,我尝试了一个简单的
SELECT id, embedding <=> $1 FROM table
,但它仍然不使用索引。
许多博客文章如this GCP one和this other one建议使用
EXPLAIN
来检查是否使用了索引。
因此我提出以下问题:
EXPLAIN
,我可以看到即使是最简单的查询也不会使用索引,因此我什至想知道索引是否实际上已创建(尽管 CREATE INDEX
已“在 1 小时 6 分钟内成功返回。”) SELECT
语句使用 HNSW 索引?CREATE INDEX
语句会发生什么?如果我创建一个 HNSW 索引,我假设它会覆盖现有索引(是吗?),如果我创建一个 IVFFLAT
索引,它会覆盖现有索引吗?