Запрос оракула к mysql left joins

i перенесла базу данных оракула компании в mysql (да не спрашивайте меня почему), и несколько запросов (для отчетности) огромны и работают в mysql

одна из них - 4021 строка с 89 INNER JOIN

этот отчет генерирует подробный отчет для корпоративного клиента за финансовый год за последний год.

Мне нужен этот отчет (с тех пор как мы скоро дойдем до конца года), работая в 2011 году, и я видел на многих сайтах, что максимальное левое соединение для mysql - это 60, которые осталось присоединиться.

Мне приписано это сообщение? или есть способ запустить его?

Ответ 1

Я думаю, что ваш запрос отчета в любом случае приведет к using temporary в EXPLAIN. Вы можете разбить один запрос на несколько в транзакции и явно сделать временные таблицы.

Это может быть еще более полезно, если ваш запрос Oracle содержит что-то вроде именованных подзапросов (я имею в виду WITH подзапросы из T-SQL, я не знаю, существуют ли они в Oracle, но определенно не существуют в MySQL).

Ответ 2

Вам нужно будет подскочить (или вниз, в зависимости от вашего вида), к языку программирования, чтобы обойти это (Ruby, PHP, Python и т.д.), все упростят обработку, что многие объединения легче, просто используя собственные объекты вместо полагаясь исключительно на огромное объединение.

И вы правы, максимальное количество соединений в MySQL равно 61 (http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html)

Ответ 3

Если это так, вы можете попытаться сломать запрос и добавить часть содержимого "левого соединения", предварительно запрошенное вместе с некоторыми другими элементами, где это возможно. Например, вы можете предварительно запросить такие вещи, как (и просто угадать)

Элементы инвентаря с категориями с основным кодом учетной записи (столбцы id) и т.д. как один предварительный запрос.

Присоединитесь ко всем деталям заказа, чтобы упорядочить заголовок заголовка, чтобы получить идентификатор клиента и присоединиться к клиентам как еще один предварительный запрос. Обеспечьте, чтобы все ключевые элементы присоединились к общему требованию к отчету.

Продолжайте вниз по списку, где это возможно, и вы, вероятно, можете убить кучу, поскольку они будут результатом SUBQueries, где ни один уровень не будет иметь 61 соединение.

Ответ 4

используйте тип перечислений, который спасет вас от болезненных левых объединений

если у вас есть несколько таблиц, которые вы можете удалить, просто используя enum, что является большим улучшением.

специально с какими данными у вас есть