我有以下问题。
我需要记录很多信息,而不能以多种方式进行分组和过滤。该信息恰好有步骤,所以让我们想象它有 4 个步骤,其中每个步骤都会为上一步添加更多信息。
目前我有 4 个表,每个步骤一个,包含每个步骤和前一个步骤的所有信息。
所以一个例子就是。
Step1 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, etc) -> 40kk records
Step2 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, step2_date, step2_ip, etc) -> 35kk 记录
Step3 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, step2_date, step2_ip, step3_date, step3_ip, time_taken, etc) -> 5kk条记录
Step4 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, step2_date, step2_ip, step3_date, step3_ip, time_taken, step4_date, step4_ip, final_value, etc) -> 1kk 记录
正如您在示例中看到的,每个步骤都包含所有先前的数据以及新字段。
理想的情况是第一步包含所有初始数据(目前约为 50 个字段),其他步骤包含每个步骤的附加数据,然后通过 transaction_id 加入并能够进行 GROUP 和 FILTER。
我尝试了这种方法,但由于它必须对每个条目进行迭代以匹配其他步骤中的事务,因此它似乎不太理想。(查询大约需要 3 秒,而另一种方式大约需要 0.1 秒)
另一方面,拥有每个表中的所有可用信息,允许我过滤 UNION 或 JOIN 之前的数据,并且速度更快,但我需要在每个步骤中复制数据..
我需要从 4 个步骤中查询一个 SELECT,它会告诉我例如特定日期和 device_id 以及按 country_id 分组的步骤 1、步骤 2、步骤 3、步骤 4 以及每个步骤可能具有的其他标志。
那么,问题是是否有任何其他方法可以加快步骤之间的关系,从而避免每个步骤中的信息重复并保持速度?也许是一种索引 transaction_id 的方法(这是唯一的并且在第一步中生成)
让我们考虑一下 step1 表每天将接收大约 100kk 条记录,而另一个表将接收同样多的信息。
谢谢你。