高速化のためのIVFFlatインデックス
pgvectorでIVFFlatインデックスを実装し、近似最近傍検索を高速化してクエリ性能を高めます。
「高速化のためのIVFFlatインデックス」はCoddyKit上の無料Vector Databases: Pinecone, Weaviate & pgvectorレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVector Databases: Pinecone, Weaviate & pgvector学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vector Databases: Pinecone, Weaviate & pgvectorコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Faster Searches with IVFFlat
Welcome to optimizing pgvector performance! For small datasets, a simple vector similarity query might be fast enough. But as your data grows, brute-force search becomes too slow.
This lesson introduces IVFFlat indexing, a powerful technique to accelerate Approximate Nearest Neighbor (ANN) searches in pgvector.
Why Vector Indexes are Key
Imagine searching for the closest person to you in a massive crowd. Without any organization, you'd have to check every single person.
Similarly, without an index, pgvector has to compare your query vector to every single vector in your table. This is called a brute-force search, and it's inefficient for large datasets.
- Indexes organize data.
- They make lookups much faster.
- Crucial for scalable vector search.
IVFFlat: The Core Idea
IVFFlat (Inverted File Index with Flat quantizer) is an ANN indexing algorithm. Its core idea is to group similar vectors into 'lists' or 'clusters'.
Think of it like sorting books by genre before looking for a specific title. You first pick the right genre, then search within that smaller section.
How IVFFlat Works: Two Steps
When you query an IVFFlat index, it performs a two-step process:
- Find nearest lists: It quickly identifies a few (or more) clusters that are closest to your query vector.
- Search within lists: It then only searches for nearest neighbors within those selected clusters, ignoring the rest of the dataset.
This significantly reduces the number of comparisons needed, speeding up your queries.
The `lists` Parameter Explained
When creating an IVFFlat index, the most important parameter is lists. This defines how many clusters (or partitions) your data will be divided into.
- More
lists: Each cluster has fewer vectors. This can lead to faster searches (less data to scan per cluster). - Fewer
lists: Each cluster has more vectors. Searches might be slower, but you're less likely to miss true nearest neighbors.
It's a trade-off between search speed and recall (how many of the true nearest neighbors you actually find).
Prepare Your Vector Table
Before creating an index, you need a table with a vector column. If you haven't already, ensure the vector extension is enabled.
Here's a quick setup for a table with 3-dimensional vectors:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE items (
id serial PRIMARY KEY,
embedding vector(3)
);
INSERT INTO items (embedding) VALUES
('[1,2,3]'),
('[1.1,2.1,3.1]'),
('[4,5,6]'),
('[4.1,5.1,6.1]'),
('[7,8,9]'),
('[7.1,8.1,9.1]');Creating an IVFFlat Index
Now, let's create an IVFFlat index on our embedding column. We'll specify the vector_l2_ops operator class for L2 distance (Euclidean distance), and set the lists parameter.
A good starting point for lists is rows / 1000 for up to 1M rows, or sqrt(rows) for larger datasets.
CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 4);Querying with the Index
Once the IVFFlat index is created, your standard similarity queries will automatically benefit from it! pgvector will use the index to find approximate nearest neighbors much faster.
Let's find the 3 closest items to [1,2,3]:
SELECT id, embedding <-> '[1,2,3]' AS distance
FROM items
ORDER BY distance
LIMIT 3;The `probes` Query Parameter
At query time, you can further tune the search with the ivfflat.probes parameter. This setting controls how many of the nearest 'lists' (clusters) are actually searched.
- More
probes: Better recall, but slower search. - Fewer
probes: Faster search, but potentially lower recall.
The default probes value is 1. You can set it for your session:
SET ivfflat.probes = 2;
SELECT id, embedding <-> '[1,2,3]' AS distance
FROM items
ORDER BY distance
LIMIT 3;IVFFlat Indexing Check
Let's test your understanding of IVFFlat indexing.
IVFFlat: Key Takeaways
Great job! You've learned the fundamentals of IVFFlat indexing in pgvector.
- IVFFlat speeds up ANN searches by partitioning data.
- The
listsparameter (index creation) controls the number of clusters. - The
ivfflat.probesparameter (query time) controls how many clusters are searched. - Both involve a trade-off between search speed and recall.
Next, we'll explore HNSW indexing, another powerful option for even higher recall.
AI チューターと学ぶ Vector Databases: Pinecone, Weaviate & pgvector — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「高速化のためのIVFFlatインデックス」レッスンは無料ですか?
はい。「高速化のためのIVFFlatインデックス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vector Databases: Pinecone, Weaviate & pgvectorコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vector Databases: Pinecone, Weaviate & pgvectorコースには全4レッスンが含まれています。
「高速化のためのIVFFlatインデックス」で何を学びますか?
pgvectorでIVFFlatインデックスを実装し、近似最近傍検索を高速化してクエリ性能を高めます。 ブラウザで直接実行するハンズオンコードでVector Databases: Pinecone, Weaviate & pgvectorを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Vector Databases: Pinecone, Weaviate & pgvectorを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのVector Databases: Pinecone, Weaviate & pgvectorは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「高速化のためのIVFFlatインデックス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このVector Databases: Pinecone, Weaviate & pgvectorレッスンでコードを書いて実行できますか?
はい。すべてのVector Databases: Pinecone, Weaviate & pgvectorレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 高速化のためのIVFFlatインデックス
- 再現率向上のためのHNSWインデックス
- クエリ性能のチューニング
- フィルタリング検索の最適化