如何在Tarantool中运行复杂查询

4
我一直在使用关系型数据库,最近决定将一个性能关键的服务从SQL Server迁移到Tarantool,希望利用快速的内存搜索和处理。在规划迁移时,我有几个问题。
我有一个包含约一百万条记录的价格信息表,这意味着我主要处理数字和UUID。首先,我需要运行一个包含多个条件的select语句来获取数据子集,例如:
SELECT * FROM rates WHERE SupplierId = @SupplierId AND ProductId = @ProductId AND (LocalDistributionZoneId = @LocalDistributionZoneId OR LocalDistributionZoneId IS NULL)

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

问题2:与纯Lua相比,在SQL(box.sql.execute)中运行这样的查询是否更方便?它会比在纯Lua中运行相同的查询慢得多吗?

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

好的,当我从第一个查询中获取结果后,我需要分析数据,然后根据分析结果对第一个查询返回的数据集运行一次查询。

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

谢谢!

1个回答

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

"你需要手动优化它。你能加一些提示或者其他的吗?" - capr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接