请开始您的表演

DOCKER

docker run -d --name pgsql -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=123456 -v /home/app/pgsql/data:/var/lib/postgresql/data -p 5432:5432 postgres:latest

DOCKER pgvector

docker run -d --name pgvector --shm-size=512m -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=123456 -v /home/app/pgvector/data:/var/lib/postgresql/data -p 5432:5432 pgvector/pgvector:pg16

数据库支持 vector

--数据库添加vector
CREATE EXTENSION IF NOT EXISTS vector;
--查询数据库vector
SELECT * FROM pg_extension WHERE extname='vector';

表添加字段

--表添加字段
ALTER TABLE "public"."table_name"  ADD COLUMN "title_embedding" vector(维度);

--修改字段维度
ALTER TABLE "public"."table_name"
ALTER COLUMN "title_embedding" TYPE vector(1024)
USING "title_embedding"::vector(1024);

索引 HNSW

-- 创建余弦 HNSW 索引(更快+更准)
SET maintenance_work_mem = '4GB';--提速
CREATE INDEX CONCURRENTLY idx_表名_字段名_hnsw_cosine
ON 表名 USING hnsw (字段名 vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
WHERE xxx = 9; 可以加入添加,也可以不加入

--维度1024可调优
WITH (m = 32, ef_construction = 200);

索引 ivfflat

CREATE INDEX CONCURRENTLY 索引名称
ON 表名 USING ivfflat(字段名 vector_cosine_ops)
WITH (lists = 600);
-- lists设置
lists 根据数据量设置

--设置当前数据库的召回量 注意配合 lists
ALTER DATABASE dev_video SET ivfflat.probes = 200;
probes 大概 lists/3 召回率95%
probes 越大,查询时间越长

其它

-- 重建索引
REINDEX INDEX 索引名称;
-- 删除索引
DROP INDEX 索引名称;
--查询索引
SELECT indexdef FROM pg_indexes WHERE indexname = '索引名称';

--临时禁用索引
SET enable_indexscan = off;
-- 执行你的查询
SELECT;
-- 完成后恢复
RESET enable_indexscan;


--索引检测
EXPLAIN (ANALYZE)
sql...

--更新统计
ANALYZE 表;

-- 查看是否被长事务阻塞
SELECT pid, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE state <> 'idle'
  AND query NOT LIKE '%pg_stat_activity%'
ORDER BY duration DESC;

命令

docker exec -it pgvector psql -U user -d dbname
\d tablename
©2019 Somore 豫ICP备19009951号 sqlixiaoli@163.com