/
vshmidt
/
pgvector
Обзор
Документация
Войти
/
vshmidt
/
pgvector
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/sql/ivfflat_vector.sql
99 строк
2 KB
Andrew Kane
Added tests for iterative index scan with empty index - resolves #679 [skip ci]
14 фев 2025, 03:28
14 фев 2025, 03:28
656b059
Код
Авторство
О чём код?
SET enable_seqscan = off; -- L2 CREATE TABLE t (val vector(3)); INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 1); INSERT INTO t (val) VALUES ('[1,2,4]'); SELECT * FROM t ORDER BY val <-> '[3,3,3]'; SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <-> (SELECT NULL::vector)) t2; SELECT COUNT(*) FROM t; TRUNCATE t; SELECT * FROM t ORDER BY val <-> '[3,3,3]'; DROP TABLE t; -- inner product CREATE TABLE t (val vector(3)); INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); CREATE INDEX ON t USING ivfflat (val vector_ip_ops) WITH (lists = 1); INSERT INTO t (val) VALUES ('[1,2,4]'); SELECT * FROM t ORDER BY val <#> '[3,3,3]'; SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <#> (SELECT NULL::vector)) t2; DROP TABLE t; -- cosine CREATE TABLE t (val vector(3)); INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); CREATE INDEX ON t USING ivfflat (val vector_cosine_ops) WITH (lists = 1); INSERT INTO t (val) VALUES ('[1,2,4]'); SELECT * FROM t ORDER BY val <=> '[3,3,3]'; SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> '[0,0,0]') t2; SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> (SELECT NULL::vector)) t2; DROP TABLE t; -- iterative CREATE TABLE t (val vector(3)); INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 3); SET ivfflat.iterative_scan = relaxed_order; SELECT * FROM t ORDER BY val <-> '[3,3,3]'; SET ivfflat.max_probes = 1; SELECT * FROM t ORDER BY val <-> '[3,3,3]'; SET ivfflat.max_probes = 2; SELECT * FROM t ORDER BY val <-> '[3,3,3]'; TRUNCATE t; SELECT * FROM t ORDER BY val <-> '[3,3,3]'; RESET ivfflat.iterative_scan; RESET ivfflat.max_probes; DROP TABLE t; -- unlogged CREATE UNLOGGED TABLE t (val vector(3)); INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 1); SELECT * FROM t ORDER BY val <-> '[3,3,3]'; DROP TABLE t; -- options CREATE TABLE t (val vector(3)); CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 0); CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 32769); SHOW ivfflat.probes; SET ivfflat.probes = 0; SET ivfflat.probes = 32769; SHOW ivfflat.iterative_scan; SET ivfflat.iterative_scan = on; SHOW ivfflat.max_probes; SET ivfflat.max_probes = 0; SET ivfflat.max_probes = 32769; DROP TABLE t;