如何在Tarantool中运行复杂查询

我一直在使用关系型数据库,最近决定将一个关键性能服务从SQL Server迁移到Tarantool,希望能够利用快速的内存搜索和处理功能。在计划迁移时,我有几个问题。

我有一个包含约一百万条记录的定价信息表,这意味着我主要处理数字和uuid。首先,我需要运行包含多个条件的select语句,以获取数据的子集,例如

SELECT * FROM rates WHERE SupplierId = @SupplierId AND ProductId = @ProductId AND (LocalDistributionZoneId = @LocalDistributionZoneId OR LocalDistributionZoneId IS NULL)

问题1:在Lua中运行这样的查询的策略是什么?我为每个谓词字段创建索引还是可以使用一个次要组合索引?

问题2:运行这样的查询是否更方便在SQL(box.sql.execute)中进行,而不是在纯Lua中进行?与在纯Lua中运行相同查询相比,是否会显着变慢?

问题3:如果我使用SQL,是否可以查看执行计划,以确保我运行的查询确实使用我在空间中定义的索引?

好的,在我获得第一个查询的结果之后,我需要分析数据,然后根据分析结果在由第一个查询返回的数据集上运行另一个查询。

问题4:Tarantool是否可以帮助我处理中间数据集?更具体地说,我是否可以针对中间元组的子集运行更多的查询,利用在空间中创建的索引?或者,我需要实现其他策略,如将中间结果重新添加到带有预定义索引的临时空间中,然后进行另一个选择,或者自己实现进一步的搜索?

谢谢!

点赞
用户1229313
用户1229313
  1. 不要使用 SQL,它更快:它不会为中间执行结果创建垃圾回收对象。
  2. 是的,请使用我们的 SQL 功能。
  3. 使用 EXPLAIN 语句。
  4. 我不知道你所说的“帮助”具体意味着什么。你可以尝试任何有效的策略:创建一个更复杂的查询,在视图中保存原始查询以在结果查询中使用,创建一个临时表并与其一起工作。为了提供更多细节,让我们看看 Tarantool 选择的执行计划是否足够好,或者你需要手动优化它。
2018-12-18 21:57:56