我读过在低基数字段 上放置索引是没有意义的。这对于这样的复合索引是否成立:
db.perms.createIndex({"owner": 1, "object_type": 1, "target": 1});
使用这样的查询:
db.perms.find({"owner": "me", "object_type": "square"});
db.perms.find({"owner": "me", "object_type": "circle", "target": "you"});
distinct 的数量object_type
会随着时间的推移而增长(可能最多不超过 10 或 20),但一开始只会有 2 或 3 个左右。
同样,哈希索引是否值得研究?
更新:
owner
并且target
会大大增长。把它想象成一个文件系统,其中owner
将“拥有”一个target
(即文件)。但是,像 unix 系统一样,文件可以是文件夹、符号链接或常规文件(因此是类型)。因此,尽管只有 3 object_type
,但 aowner
和target
组合可能有数千个类型分布均匀的条目。