AI & Vectors

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:

OperatorDescriptionOperator class
<->Euclidean distancevector_l2_ops
<#>negative inner productvector_ip_ops
<=>cosine distancevector_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.