MongoDB Schema Design & Indexes
Avoid large document
MongoDB里document的大小上限是16MB。但是实际情况下,大部分文档都没有这么大。如果要存储多媒体数据,则应该是用GridFS。
Avoid unnecessarily long field names
字段名在没一个文档中都会重复出现,并且是会占用存储空间的。所以小的字段名可以节省空间,特别是对于节省RAM的空间特别有用。
Use caution when considering indexes on low-cardinality fields
设置索引的字段值要足够离散,如果离散度低的话,实际上会返回很大的一个结果集。复合索引可以包含离散度低的字段,但是它们组合起来建立的索引必须是高度离散的。
Eliminate unnecessary indexes
索引是很消耗资源的,占用RAM,在document的字段值更新时,索引也会造成额外的硬盘I/O,所以,干掉不必要的索引。
Remove indexes that are prefixes of other indexes
如果某一个字段的索引已经是其他索引的前缀字段了,那么单独的这个索引就是没有必要的。比如,复合索引 last_name, first name,这个索引在查询last_name的时候同样有效。
Use a compound index rather than index intersection
在根据多个字段查询的时候,复合索引是一个更优的选择
Use partial index
使用不完全索引,可以减少空间的消耗和索引创建和维护时的性能消耗。
Avoid regular expressions that are not left anchored or rooted
查询条件如果以通配符开头的话是非常低效的。
Use index optimizations available in WiredTiger storage engine
WiredTiger引擎下会自动压缩索引。
Understand any existing document schema - MongoDB Compass
MongoDB Compass 是个好工具,可以熟悉一下它的使用。
Identify & remove obsolete indexes
即使辨别并移除废弃的索引