You need to enable JavaScript to run this app.
导航
向量检索最佳实践
最近更新时间:2025.05.22 14:13:44首次发布时间:2025.05.22 14:13:44
我的收藏
有用
有用
无用
无用

使用 ByteHouse 向量检索功能时,ByteHouse 提供了一系列配置参数,帮助您提升查询精度,降低响应延迟。您可按需选择在 SQL 建表语句、config.xml 文件或 users.xml 文件中配置相关参数。

SQL 建表配置

使用 SQL 语句建表时,可以通过配置 settings 参数来优化向量检索性能。建议配置如下:

CREATE TABLE test_ann (
    id UInt64,
    embedding Array(Float32),
    INDEX vec_idx embedding TYPE HNSW('METRIC=COSINE, DIM=768')
)
ENGINE = MergeTree
ORDER BY id
SETTINGS 
    index_granularity = 128,         -- 调小 Mark 大小
    index_granularity_bytes = 0,     -- 禁用 Adaptive Mark
    enable_vector_index_preload = 1, -- 启用索引预加载
    merge_selector_config = '{"name": "dance", "max_parts_to_merge_base": 100, "min_parts_to_merge_base": 2, "min_parts_to_enable_multi_selection": 50, "max_total_rows_to_merge": 20000000, "max_parts_to_break": 10000, "enable_heuristic_to_align_parts": 0}'
;

参数说明

参数

作用

推荐值

index_granularity

控制每个 Mark 包含的行数,调小可降低读放大,提升向量过滤精度。

128

index_granularity_bytes

禁用 Adaptive Mark,固定 Mark 大小,减少 Mark 定位计算开销。

0

enable_vector_index_preload

数据写入后直接加载向量索引到内存,消除首次查询的加载延迟。

1

merge_selector_config

优化数据合并策略,控制分区数量和合并规模,减少查询时扫描的分区数。

见下方 merge_selector_config 参数详解

merge_selector_config 参数详解

子参数

作用

推荐值

name

选择合并算法,dance 适合向量数据分布,平衡写入与查询性能。

"dance"

max_parts_to_merge_base

单次合并的最大分区数,防止过度合并导致写入阻塞。

100

min_parts_to_merge_base

触发合并的最小分区数,避免小分区长期存在增加扫描开销。

2

max_total_rows_to_merge

单次合并的最大行数,避免构建过大的索引。

20000000

enable_heuristic_to_align_parts

禁用启发式对齐,简化合并逻辑,减少合并耗时。

0(禁用)

User xml 配置

通过 users.xml 配置用户级参数,优化向量索引的构建效率和查询性能。修改配置参数的操作详情请参见修改配置参数

# 基于实际导入速度与机器核数调整 
<vector_index_build_threads>4</vector_index_build_threads>
<enable_new_ann>1</enable_new_ann>
<log_processors_profiles>0</log_processors_profiles>
<compile_expressions>0</compile_expressions>
<compile_sort_description>0</compile_sort_description>

参数

作用

推荐值

enable_new_ann

启用 ByteHouse 新一代向量近似搜索引擎,支持 HNSW 等高效索引算法。

1(启用)

vector_index_build_threads

控制向量索引构建时的并发线程数,提升大数据量下的索引构建速度。

4-8(根据 CPU 核数调整)

log_processors_profiles

禁用处理器配置文件日志,减少日志写入开销,提升查询性能。

0(禁用)

compile_expressions

关闭表达式编译优化,避免复杂向量计算的编译耗时。

0(禁用)

compile_sort_description

关闭排序描述编译优化,提升向量排序操作的性能。

0(禁用)

Config xml 配置

对于数据量较大的向量检索场景,建议通过 config.xml 进行以下配置优化。修改配置参数的操作详情请参见修改配置参数

<enable_use_local_lock>1</enable_use_local_lock>
## 基于机器内存调整 2.6 版本默认 2GB 
<vector_index_cache_size>193273528320</vector_index_cache_size> ## 180 Gigabyte
<disk_unique_key_index_meta_cache_size>2147483648</disk_unique_key_index_meta_cache_size>
<disk_unique_key_index_data_cache_size>5368709120</disk_unique_key_index_data_cache_size>
<additional_services> # 可以后期加,不需要重启生效
  <VectorSearch>true</VectorSearch>
  <FullTextSearch>true</FullTextSearch>
</additional_services>

参数

作用

推荐值

enable_use_local_lock

启用本地锁机制,减少写入冲突,提升高并发场景下的向量数据写入性能。

1(启用)

vector_index_cache_size

设置向量索引在内存中的缓存大小,直接影响向量检索的响应速度。

根据机器内存调整,建议 100GB+

disk_unique_key_index_meta_cache_size

唯一键索引元数据的缓存大小,优化键值检索性能。

2GB 以上

disk_unique_key_index_data_cache_size

唯一键索引数据的缓存大小,提升数据读取速度。

5GB 以上

additional_services

动态启用额外服务,无需重启服务。

按需启用