2

重复: Couchbase 4 beta “ORDER BY”性能

就像问题标题显示的那样,我面临着巨大的响应延迟,例如使用 Couchbase 4 (N1QL)ORDER BY子句的一次通话需要 13 秒。如果我不使用ORDER BY子句,一切都很好。

我的主索引是

Definition: CREATE PRIMARY INDEX `#primary` ON `default` USING GSI

二级索引是

Definition: CREATE INDEX `index_location_name` ON `default`(`name`) USING GSI

N1QL 查询

req.params.filter可以是位置文档中的任何键。

SELECT _id AS id FROM default WHERE type = 'location' ORDER BY " + req.params.filter + (req.query.descending?' DESC':'') + " LIMIT " + limit + " OFFSET " + 跳过

我的存储桶中的位置文件是

{
  "_id": "location::370794",
  "name": "Kenai Riverside Fishing",
  "avgRating": 0,
  "city": "Cooper Landing",
  "state": "Alaska",
  "country": "USA",
  "zipCode": "99572",
  "created": "2013-07-10T17:30:00.000Z",
  "lastModified": "2015-02-13T12:34:36.923Z",
  "type": "location",
}

任何人都可以说出为什么ORDER BY条款会造成如此多的延迟?

4

1 回答 1

0

我相信 couchbase 不是为处理可以按任何字段排序的查询而构建的。由于在 CB 中排序是一项昂贵的操作,因此始终建议基于排序字段创建索引。此外,如果索引是按升序构建的,则不能用于降序,反之亦然。CB 的最佳选择是在可行的情况下使用 asc & desc 顺序创建所有可能的索引。

我还建议您考虑弹性搜索是否更适合您的动态搜索用例。

于 2019-09-27T12:42:28.517 回答