2011-12-10 11 views
10

i migracji bazy danych Oracle firma mysql (yeah nie pytaj mnie dlaczego) i kilka zapytań (dla raportowania) są ogromne i pracuje w mysqloracle do mysql lewej dołącza

jeden z nich jest z 4021 linii 89 WEWNĘTRZNY DOŁĄCZ

ten generuje w pełni szczegółowy raport dla klienta firmy dla finansów za ostatni rok.

Potrzebuję tego raportu (odkąd doszliśmy do końca roku) pracując w 2011 r. I zobaczyłem na wielu stronach, że maksymalne lewe dołączenie do mysql to 60 coś, co pozostało złączone.

Czy jestem przykuty tym raportem? czy jest jakiś sposób, żeby to uruchomić?

+0

Jeśli potrzebujesz nowych połączeń, ponieważ raport obejmuje nowy rok, prawdopodobnie Twój model danych jest nieprawidłowy. –

+1

Dlaczego brak wielkich liter? –

Odpowiedz

0

Musisz przeskoczyć (lub w dół, w zależności od widoku) do języka programowania, aby ominąć to (Ruby, PHP, Python, itp.), Wszystko to sprawi, że obsługa wielu złączeń będzie łatwiejsza po prostu używając natywnych obiektów zamiast polegania wyłącznie na ogromnym sprzęcie.

I masz rację, maksymalna liczba łączy w MySQL jest 61 (http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html)

+1

Podany link mówi, że maksymalna liczba tabel, do których można odwoływać się w dowolnej instrukcji 'JOIN', wynosi 61, nie oznacza to, że maksymalna liczba' JOIN'ów w jednym zapytaniu wynosi 61. –

0

Jeśli to przypadek, może chcesz spróbować złamać kwerendy się trochę i dostać niektóre z „left join” treść jest wstępnie zadawana, wraz z kilkoma innymi elementami, o ile jest to praktyczne. Na przykład możesz wstępnie zapytać o rzeczy takie jak (i ​​po prostu zgadywanie):

Zapasy z kategoriami z kodem konta KG (kolumny identyfikacyjne) itp. Jako jedno zapytanie wstępne.

Dołącz do tego z wszystkimi szczegółami zamówienia do podsumowania nagłówka zamówienia, aby uzyskać identyfikator klienta i dołączyć do klientów jako kolejne zapytanie wstępne. Upewnij się, że wszystkie kluczowe elementy, które chcesz dołączyć do ogólnego wymogu raportu.

Idąc dalej w dół listy, gdzie to możliwe, prawdopodobnie można zabić paczkę, ponieważ byłyby to wyniki SUBQueries, gdzie żaden poziom nie miałby 61 połączeń.

0

użytku teksty stałe typ, który pozwoli Ci zaoszczędzić od bolesnej lewej dołącza

jeśli masz kilka stolików można usunąć tylko przy użyciu enum że jest to wielki postęp.

specjalnie z jakiego rodzaju dane masz

5

myślę zapytanie raport będzie w każdym razie skutkować using temporary w wyjaśnić. Możesz podzielić pojedyncze zapytanie na kilka w transakcji i jawnie utworzyć tabele tymczasowe.

Może to być jeszcze bardziej przydatne, jeśli zapytanie Oracle zawiera coś takiego jak podkwerendy nazwane (mam na myśli WITH podzapytania z T-SQL, nie wiem, czy istnieją w Oracle, ale zdecydowanie nie istnieją w MySQL).

+0

+1 dla tabel tymczasowych. Byłem tam, zrobiłem to. – Mchl

+0

CTE istnieją w normalnych bazach danych, ale mysql :))). Przestrzeń przydzielona na tablice tymczasowe ma również skończoną liczbę, nawet w mysql powinieneś o tym pomyśleć :)) –