为了防止过多索引拖慢数据库,数据库动态创建索引,隔几天就换一套索引,会有什么问题?

我打算用 PostgreSQL。不过我感觉不同数据库可能大同小异,所以问题没限定 PostgreSQL。网上有推荐索引最好不要超过六个的。但是我想给用 jsonb 实现的 EAV 系统加很多索引。所以就想到这么一个方法。问过 DeepSeek 了,我理解它说除非是索引删除重建过于频繁,一般没什么大问题。

开发和维护麻烦就不用说了,确实麻烦。但是我感觉收益很大,所以我想试试。另外还需要用户配合,还需要做一个索引预告。

另外我对具体有多麻烦的估计可能不太准确。我感觉三十小时以内应该可以搞定。如果需要很长时间开发的话我可能需要到时候调查一下用户再决定要不要做。

阅读 1.2k
2 个回答

动态更换索引(频繁创建/删除索引)是一种极其不推荐的做法,除非非常明确地权衡过利弊并做好优化保障。

可以结合 使用 GIN 索引,减少索引数量
GIN (Generalized Inverted Index) 是一种适合于包含多值和复杂数据结构的索引类型,特别适合 jsonb 数据。

创建 GIN 索引的示例:
sql
CREATE INDEX idx_jsonb_data ON your_table USING GIN (json_data);
这里 json_data 是存储 JSONB 数据的列,your_table 是表名。

使用路径表达式的 GIN 索引:

然后结合你经常实在有必要的查询 JSONB 数据的特定键,可以使用路径表达式来创建更优化的索引。例如:

CREATE INDEX idx_jsonb_key ON your_table USING GIN ((json_data->>'your_key'));
这将为特定键的查询提供优化。

推荐问题