主键模型 主键索引内存主要作用是干嘛。
enable_persistent_index 开启持久化索引后,会影响查询效率吗
不影响的 主要的目的是同时使用磁盘和内存存储主键索引,避免主键索引占用过大内存空间
enable_persistent_index
:是否持久化主键索引,同时使用磁盘和内存存储主键索引,避免主键索引占用过大内存空间。通常情况下,持久化主键索引后,主键索引所占内存为之前的 1/10。您可以在建表时,在 PROPERTIES
中配置该参数,取值范围为 true
或者 false
(默认值)。
- 自 2.3.0 版本起,StarRocks 支持配置该参数。
- 如果磁盘为固态硬盘 SSD,则建议设置为
true
。如果磁盘为机械硬盘 HDD,并且导入频率不高,则也可以设置为true
。- 建表后,如果您需要修改该参数,请参见 ALTER TABLE 修改表的属性 。
- 存算分离模式不支持主键模型表开启持久化索引。
- 如果未开启持久化索引,导入时主键索引存在内存中,可能会导致占用内存较多。因此建议您遵循如下建议:
- 合理设置主键的列数和长度。建议主键为占用内存空间较少的数据类型,例如 INT、BIGINT 等,暂时不建议为 VARCHAR。
- 在建表前根据主键的数据类型和表的行数来预估主键索引占用内存空间,以避免出现内存溢出。以下示例说明主键索引占用内存空间的计算方式:
- 假设存在主键模型,主键为
dt
、id
,数据类型为 DATE(4 个字节)、BIGINT(8 个字节)。则主键占 12 个字节。 - 假设该表的热数据有 1000 万行,存储为三个副本。
- 则内存占用的计算方式:
(12 + 9(每行固定开销) ) * 1000W * 3 * 1.5(哈希表平均额外开销) = 945 M
- 假设存在主键模型,主键为
所以主键索引主要是为了增加写入效率,因为主键模型是delete+insert 模式,并不是直接写入。所以需要有主键索引来提升写入效率。而更新模型就不需要,无脑写入就可以了。
主键索引降低了写入效率,提高了查询效率。