lua - 如何在 Tarantool 中运行复杂查询

标签 lua tarantool

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

我有一个包含大约一百万条记录的表,其中包含定价信息,这意味着我主要处理数字和 uuid。首先,我需要运行一个包含多个条件的选择来获取数据的子集,比如

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

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

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

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

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

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

谢谢!

最佳答案

  • 别。使用 SQL,它更快:它不会为中间执行结果创建垃圾收集对象。
  • 是的,请为此使用我们的 SQL 功能。
  • 使用 EXPLAIN 语句。
  • 我不知道你所说的“帮助”究竟是什么意思。您可以尝试任何最有效的策略:创建一个更复杂的查询,将原始查询保存在 View 中以在结果查询中使用,创建一个临时表并使用它。为了提供更多细节,让我们看看 Tarantool 选择的执行计划是否足够好,或者您必须手动优化它。
  • 关于lua - 如何在 Tarantool 中运行复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53639489/

    相关文章:

    lua - '<' 附近的意外符号

    python - lua cjson 无法解码特定的 unicode 字符?

    function - 'this' 引用 Lua 中的函数调用者

    error-handling - 如何正确打印来自 `luaL_dostring()`的错误消息?

    go - tarantool 队列尝试索引全局 'queue'

    java - Tarantool Java 连接器

    string - 让 Lua 中的数字更容易阅读

    database - Redis AOF 和 Tarantool WAL 日志的区别

    java - TarantoolConnection16 不是线程安全的