我一直在使用关系型数据库,最近决定将一个性能关键的服务从SQL Server迁移到Tarantool,希望利用快速的内存搜索和处理。在规划迁移时,我有几个问题。
我有一个包含约一百万条记录的价格信息表,这意味着我主要处理数字和UUID。首先,我需要运行一个包含多个条件的select语句来获取数据子集,例如:
我有一个包含约一百万条记录的价格信息表,这意味着我主要处理数字和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能帮助我处理中间数据集吗?更具体地说,我是否可以利用在空间中创建的索引针对中间子元组运行更多查询?还是说,我需要实现替代策略,例如将中间结果重新添加到具有预定义索引的临时空间中,然后进行另一个选择,或者自己实现进一步的搜索?
谢谢!