Tarantool 中的复杂 SELECT 查询

有两个表,命名为 CompanyCars。表 Company 包含公司 ID (主键)和地理位置(二级索引)字段。表 Cars 包含车辆 ID (主键)和可以租用该车辆的所有公司(公司以数组的形式表示)。我需要在指定矩形范围内获取可以租用指定车辆的前 10 家公司。如何实现这个操作呢?

在这里,需要同时利用空间和非空间索引来获得结果。我的查询计划是查找车辆元组,并获取所有公司(可能有 1000 家),然后在另一个表中过滤出符合矩形范围的前 10 家公司。

我的使用场景类似于此(不是租车场景),但所有逻辑都是相同的。公司数量将比车辆多得多(数百万个公司和 30-50 万辆车)。如何优化我的计划以获取这些信息,应该使用哪些索引等等?一个 select 需要同时满足空间和非空间条件,就像你所看到的一样。

点赞
用户1229313
用户1229313

我认为对于这种类型的索引,最好的策略是将你的汽车映射为另一维中相互间距足够远的点。例如,如果你的典型搜索范围在几平方公里内,请确保每辆汽车的“坐标”至少与最近的邻居车辆相距数十公里。然后,您可以使用我们的多维RTREE索引进行搜索。

2016-05-05 08:31:20