我将公司的oracle数据库迁移到mysql(是的,不要问我为什么),很少有查询(报告)很大并且在mysql中工作
其中一个是4021行,89 INNER JOIN
这个为公司客户生成去年财务报告的完整详细报告。
我需要那份报告(因为我们很快就要到了今年年底)工作到2011年,我在许多网站上看到,mysql的最大左边连接是剩下的60件事。
我搞砸了这份报告吗?或者我有办法运行它?答案 0 :(得分:5)
我认为您的报告查询无论如何都会在EXPLAIN中生成using temporary
。您可以在事务中将单个查询拆分为多个,并显式创建临时表。
如果您的Oracle查询包含类似命名的子查询(我的意思是来自T-SQL的WITH
子查询,我不知道它们是否存在于Oracle中,但在MySQL中肯定不存在),这可能会更有帮助
答案 1 :(得分:0)
你必须向上(或向下,取决于你的观点)跳转到编程语言来解决这个问题(Ruby,PHP,Python等),只需使用本机对象而不是更容易处理许多连接完全依靠巨大的联接。
你是对的,MySQL中的最大连接数是61(http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html)
答案 2 :(得分:0)
如果是这种情况,您可能想要尝试将查询中断一些并获得一些“左连接”内容以及其他一些可行的元素。例如,您可以预先查询(并且只是猜测)
之类的内容将具有G / L帐户代码(id列)等类别的库存项目作为一个预查询。
加入所有订单详细信息以订购标题摘要以获取客户ID并作为另一个预查询加入客户。确保加入到整体报告要求的任何关键元素。
在可能的情况下继续列表,你可能会杀死一堆,因为它们是SUBQueries的结果,其中没有一个级别会有61个连接继续。
答案 3 :(得分:0)
使用枚举类型,这将使您免于痛苦的左连接
如果您的桌子很少,只需使用enum
就可以删除,这是一个很大的改进。
特别是你有什么样的数据