我将公司的oracle数据库迁移到mysql (是的,不要问我为什么),很少有查询(用于报告)是巨大的,并且在mysql中工作
其中之一是具有89个内连接的4021行
这为公司客户生成了去年财务状况的详细报告。
我需要这份报告(因为我们很快就要到年底了)2011年的工作,我在许多网站上看到mysql的最大左连接是60左右的左连接。
我是不是搞砸了这份报告?还是有办法让我运行它?
发布于 2012-01-15 17:43:21
我认为您的报表查询无论如何都会导致EXPLAIN中的using temporary。您可以在一个事务中将单个查询分解为多个查询,并显式地创建临时表。
如果您的Oracle查询包含像这样的命名子查询(我指的是来自T- WITH的SQL子查询,我不知道它们是否存在于Oracle子查询中,但肯定不存在于MySQL中),这可能会更有帮助。
发布于 2011-12-10 11:43:33
你必须跳到编程语言(Ruby,PHP,Python,等等)来解决这个问题,只需使用原生对象,而不是仅仅依赖于巨大的连接,就可以更容易地处理如此多的连接。
你是对的,MySQL中的最大联接数是61 ( http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html )
发布于 2011-12-10 12:15:48
如果是这样的话,您可能希望尝试分解一些查询,并在实际情况下预先查询一些"left join“内容以及其他一些元素。例如,您可以预先查询(并且只是猜测)
以总账科目编码(id列)等分类的存货项目作为一个预查询。
将其与所有订单详细信息连接到订单标题摘要,以获取客户ID并作为另一个预查询连接到客户。确保将任何关键元素加入总体报告要求。
在可能的情况下继续向下列表,你可能会杀死一群人,因为他们将是SUBQueries的结果,没有一个级别会有61个连接在进行。
https://stackoverflow.com/questions/8454185
复制相似问题