在 couchbase 中高效创建索引
Efficiently create indexes in couchbase
我有一个庞大的数据库,用户可以在其中使用多个过滤器进行查询。我有大约 10 个过滤器可供用户使用,并且可以应用多个过滤器。基于此过滤器创建索引的有效方法是什么?我要为所有可能的组合创建索引吗?如果我沿着这条路走下去,创建太多索引可能会产生什么影响?
如果不了解您的系统,这是一个很难回答的问题。以下是我的建议:
1) Couchbase 6.5 有一个索引推荐器,把它安装在你的机器上,运行 那里有最常见的查询。它会为您提供正确的索引。
2) 获得所有索引建议后,尝试将具有相同文档类型的索引组合起来
3) 每种文档类型至少应该有一个索引
4) 从生产环境中删除您的主索引(一旦您已经为每种文档类型至少创建了一个索引)
5) 排序是一项昂贵的操作,请考虑将数据存储在已经排序的索引中:
CREATE INDEX `us_users_sorted` ON
`user_profile`(
`countryCode`,
`firstName` DESC,
`lastName` DESC)
WHERE (((`type` = "user")
and (`enabled` = true))
and (`countryCode` = "US"))
6) 尽可能避免 select * 并使用部分索引和覆盖索引
7) 如果文档的字段太多需要索引,请考虑使用自适应索引
创建过多索引的副作用自然是占用更多磁盘、cpu 和内存。但是,这取决于您的数据和集群的大小。
如果你有一个 >=5 个节点的集群,你也可以考虑从数据节点拆分索引和查询。
我有一个庞大的数据库,用户可以在其中使用多个过滤器进行查询。我有大约 10 个过滤器可供用户使用,并且可以应用多个过滤器。基于此过滤器创建索引的有效方法是什么?我要为所有可能的组合创建索引吗?如果我沿着这条路走下去,创建太多索引可能会产生什么影响?
如果不了解您的系统,这是一个很难回答的问题。以下是我的建议:
1) Couchbase 6.5 有一个索引推荐器,把它安装在你的机器上,运行 那里有最常见的查询。它会为您提供正确的索引。
2) 获得所有索引建议后,尝试将具有相同文档类型的索引组合起来
3) 每种文档类型至少应该有一个索引
4) 从生产环境中删除您的主索引(一旦您已经为每种文档类型至少创建了一个索引)
5) 排序是一项昂贵的操作,请考虑将数据存储在已经排序的索引中:
CREATE INDEX `us_users_sorted` ON
`user_profile`(
`countryCode`,
`firstName` DESC,
`lastName` DESC)
WHERE (((`type` = "user")
and (`enabled` = true))
and (`countryCode` = "US"))
6) 尽可能避免 select * 并使用部分索引和覆盖索引
7) 如果文档的字段太多需要索引,请考虑使用自适应索引
创建过多索引的副作用自然是占用更多磁盘、cpu 和内存。但是,这取决于您的数据和集群的大小。
如果你有一个 >=5 个节点的集群,你也可以考虑从数据节点拆分索引和查询。