- 索引使用
- 设计合适的复合索引:
- 原理:CouchDB视图基于索引进行查询。对于分页查询,如果查询涉及多个字段,创建复合索引可以避免多次扫描。例如,如果经常按时间和用户ID进行分页查询,创建以时间和用户ID为顺序的复合索引,这样查询时可以直接定位到相关数据范围,减少扫描的数据量。
- 示例:在
_design
文档中定义复合索引,如下:
{
"views": {
"by_time_user": {
"map": "function(doc) { if (doc.time && doc.user_id) { emit([doc.time, doc.user_id], doc); } }",
"reduce": "_count"
}
}
}
- 查询参数设置
- 使用
limit
和skip
合理设置分页:
- 原理:
limit
参数用于指定每页返回的文档数量,skip
用于指定从结果集的第几项开始返回。合理设置limit
可以避免一次性返回过多数据,减少网络传输和处理时间。而skip
结合limit
实现分页效果。但要注意,随着skip
值增大,查询性能会下降,因为CouchDB需要跳过前面的数据项。
- 示例:查询第二页,每页10条数据,URL如下:
/_design/your_design_doc/_view/your_view?limit=10&skip=10
- 使用
startkey
和endkey
:
- 原理:
startkey
和endkey
用于限定查询范围。在分页场景下,如果已知数据的顺序(如按时间排序),通过设置startkey
和endkey
可以直接定位到特定的数据范围,避免全表扫描。这比使用skip
更高效,因为skip
需要CouchDB遍历前面的所有文档,而startkey
和endkey
直接利用索引定位。
- 示例:假设按时间戳排序,查询时间戳在
2023 - 01 - 01T00:00:00Z
到2023 - 01 - 02T00:00:00Z
之间的数据,URL如下:
/_design/your_design_doc/_view/your_view?startkey="2023 - 01 - 01T00:00:00Z"&endkey="2023 - 01 - 02T00:00:00Z"