我希望在OLAP层中连接多个大表来支持UI。由于表非常大,每个连接查询的响应时间太长。我想在3秒内得到结果。但问题是,我不想一次看到整个联接数据,因为在任何特定点,我只在UI中显示结果的一小部分。只有用户交互才需要我显示结果的下一个子集。
我正在寻找一种策略来创建一个系统,在那里我可以执行相同的连接查询,但最初只有一个小子集被连接并用于为UI提供动力。与此同时,其余较小的数据子集在后台连接,并在需要时将其拉入UI。这是解决这个问题的正确方法吗,我必须执行非常大的连接?如果有,我该如何设计这样一个系统?
您可以使用WITH HOLD
游标:
START TRANSACTION;
DECLARE c CURSOR WITH HOLD FOR SELECT /* big query */;
FETCH 50 FROM c;
COMMIT;
COMMIT
将花费很长时间,因为它将整个结果集具体化,但FETCH 50
可以相当快(或不快,取决于查询)。
然后可以继续从游标中抓取。操作完成后不要忘记关闭光标:
CLOSE c;