我一直使用关系数据库,最近决定将性能关键服务从 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 可以帮我处理中间数据集吗?更具体地说,我可以利用空间中创建的索引以某种方式对元组的中间子集运行更多查询吗?或者,我需要实施替代策略,例如将 intrim 结果重新添加到具有预定义索引的临时空间,然后再进行选择,或者自己实施进一步搜索?
谢谢!