我正在尝试从20多分钟的运行时间开始报告,并且我已经跟踪了这个使用5个连接和3个子查询的mysql查询的怪物的瓶颈,以便在一个数据集中返回所有结果。到目前为止,我的主要瓶颈似乎是:加入支付表上的股票表是stock.id匹配payment.stock_id,payment.type是这种类型,payment.status就是这种状态。我正在慢慢将其分解为各种查询并让Java决定保留哪些记录并丢弃但是我想知道在mysql中是否有一种有效的方法来获取几个结果集,可能是因为表存储在内存中然后查询反对那些?我的一些结果集非常大,在最坏的情况下会有几十万个条目。
提前致谢
答案 0 :(得分:0)
您可以选择创建实体化视图,以便可以按时间间隔运行,但基本上会对数据的有效性产生延迟影响。但肯定会更快。
其次是加入列的索引。
子选择通常比JOIN更昂贵,因此请尝试将子选择合并到连接中。
有很多SQL优化书籍值得一读,可以解决这些问题。但是不知道您的数据库或模式或索引以及联接和子选择的方式。它几乎就像在黑暗中接球一样。