Fórum Root.cz

Hlavní témata => Server => Téma založeno: Smokie 29. 03. 2011, 16:56:09

Název: Příliš dlouhý SELECT
Přispěvatel: Smokie 29. 03. 2011, 16:56:09
Zdravim,
mam problem. Mam SELECT, ktory spaja 8 tabuliek a vo vysledku ma asi okolo 200 stlpcov. Viem, ze je to vela, ale bohuzial nie je ine riesenie.

Na localhoste nie je problem, ale na hostingu takyto SELECT uz nefunguje, pretoze
Kód: [Vybrat]
#1104 - The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
Skusil som to nastavit pred vytvorenim tohto SELECTU, ale nepomohlo to.

Nenapada niekoho riesenie?

Dakujem
Název: Re: Prilis dlhy SELECT
Přispěvatel: dvdmchl 29. 03. 2011, 17:08:37
Jestli SQL server umoznuje, tak vytvorit nekolik docasnych tabulek a pak delat select nad nimi.
Název: Re: Prilis dlhy SELECT
Přispěvatel: xdxd 29. 03. 2011, 17:50:29
najpr vybrat stlpce a potom spajat tabulky? ale nerobim s tym tak neviem
Název: Re: Prilis dlhy SELECT
Přispěvatel: BenderTheOffender 29. 03. 2011, 18:08:52
Je to celkom logicke. Provide nechce usmazit databazu prasiackymi Selectami. Skor ma zaraza naco je nutne zobrazit 200 stlpcov. Nie je mozne spravit 8 pod selectov a ako zdroj dat brat ID z nejakeho master selectu?
Název: Re: Prilis dlhy SELECT
Přispěvatel: Smokie 29. 03. 2011, 18:20:48
Je to celkom logicke. Provide nechce usmazit databazu prasiackymi Selectami. Skor ma zaraza naco je nutne zobrazit 200 stlpcov. Nie je mozne spravit 8 pod selectov a ako zdroj dat brat ID z nejakeho master selectu?
Viem, ze je to logicke. Ale okolnosti si takyto prasacky select vyzaduju (poziadavky zakaznika a nizka odmena). Je to tabulka s udajmi vo velmi obsirnych a detailnych zivotopisoch, cize preto take mnozstvo stlpcov.

Skusal som nerobit VIEW, ale len SELECT, ale ani to mi nevzalo. Problem je ten maximalny pocet tabuliek, pretoze som sa pokusil tiez znizit pocet stlpcov tym, ze som concatoval tie, ktore sa iterovali (napr. jazyk1, jazyk2,... relacna tabulka tu neprichadza do uvahy) a neviedlo to nikam (pricom som znizil pocet o cca 85 stlpcov).

Tiez som rozmyslal nad docasnymi tabulkami, ale bojim sa, ze by som opat narazil na problem s MAX_SELECT_SIZE. Ten nepusti a je nastaveny na 1 MB a tak rozmyslam ci vobec ma tento problem za tychto okolnosti riesenie.
Název: Re: Prilis dlhy SELECT
Přispěvatel: Kit 29. 03. 2011, 20:41:33
... Ale okolnosti si takyto prasacky select vyzaduju (poziadavky zakaznika a nizka odmena). Je to tabulka s udajmi vo velmi obsirnych a detailnych zivotopisoch, cize preto take mnozstvo stlpcov.
To zní skoro jako požadavek na školní matriku. Podle mne to chce spíš nějakou dokumentově orientovanou databázi než SQL. Nebo alespoň pořádně denormalizovat.
Název: Re: Příliš dlouhý SELECT
Přispěvatel: Logik 29. 03. 2011, 21:51:28
Jestli je problémem počet tabulek, tak prostě vytvoř selectem ze čtyř tabulek jednu temporary a tu pak joinuj....
Název: Re: Příliš dlouhý SELECT
Přispěvatel: devnull 30. 03. 2011, 00:05:21
Joinovat 8 tabulek podle me problem neni - spis bych cekal ze tam bude nejak spatne napsanej JOIN a bude to plodit strasne mnozstvi radku - jako treba preklep v nazvu tabulky nebo tak (t1 INNER JOIN t2 ON t1.id = t1.id )
Název: Re: Příliš dlouhý SELECT
Přispěvatel: Smokie 30. 03. 2011, 00:46:43
Joinovat 8 tabulek podle me problem neni - spis bych cekal ze tam bude nejak spatne napsanej JOIN a bude to plodit strasne mnozstvi radku - jako treba preklep v nazvu tabulky nebo tak (t1 INNER JOIN t2 ON t1.id = t1.id )
Joinovat 8 tabuliek problem naozaj nie je, pretoze na localhoste to bezi. Nie je ani preklep v nazve tabulky alebo podobny preklep ako si uviedol.
Název: Re: Příliš dlouhý SELECT
Přispěvatel: Smokie 30. 03. 2011, 00:47:16
Jestli je problémem počet tabulek, tak prostě vytvoř selectem ze čtyř tabulek jednu temporary a tu pak joinuj....
Vyskusam to.
Název: Re: Příliš dlouhý SELECT
Přispěvatel: devnull 30. 03. 2011, 00:51:17
A
show variables like 'MAX_JOIN_SIZE%'
ti na hostingu/localhostu vraci co?
Název: Re: Příliš dlouhý SELECT
Přispěvatel: Smokie 30. 03. 2011, 07:39:14
A
show variables like 'MAX_JOIN_SIZE%'
ti na hostingu/localhostu vraci co?
localhost: 18446744073709551615
hosting: 1000000

Ked ten VIEW mam rozdeleny na dve casti, tak to ide, problem nie je. Uz len musim vymysliet ako to vo vysledku "spojit".
Název: Re: Příliš dlouhý SELECT
Přispěvatel: Smokie 30. 03. 2011, 07:48:51
Ale to by mohlo ist prave cez tie temporary tables, musim to vyskusat.