Vector indexes
Once your vector table starts to grow, you will likely want to add an index to speed up queries. Without indexes, you'll be performing a sequential scan which can be a resource-intensive operation when you have many records.
Choosing an index#
Today pgvector supports two types of indexes:
In general we recommend using HNSW because of its performance and robustness against changing data.
Distance operators#
Indexes can be used to improve performance of nearest neighbor search using various distance measures. pgvector includes 3 distance operators:
| Operator | Description | Operator class |
|---|---|---|
<-> | Euclidean distance | vector_l2_ops |
<#> | negative inner product | vector_ip_ops |
<=> | cosine distance | vector_cosine_ops |
For pgvector versions 0.7.0 and above, it's possible to create indexes on vectors with the following maximum dimensions:
- vector: up to 2,000 dimensions
- halfvec: up to 4,000 dimensions
- bit: up to 64,000 dimensions
You can check your current pgvector version by running: SELECT * FROM pg_extension WHERE extname = 'vector'; or by navigating to the Extensions tab in your Supabase project dashboard.
If you are on an earlier version of pgvector, you should upgrade your project here.
Resources#
Read more about indexing on pgvector's GitHub page.