MySQL-3.23.21-beta a BerkeleyDB tables
Karel Zak
zakkr na zf.jcu.cz
Sobota Červenec 15 13:45:40 CEST 2000
On Fri, 14 Jul 2000, Honza Pazdziora wrote:
> On Fri, Jul 14, 2000 at 12:42:31PM +0200, Karel Zak wrote:
> >
> > Tabulku uvnitr nejake funkce asi udelas, ale moc nechapu kdy ji chces
> > delat. Tedy to "mezitim" a neni mi jasne jak by se tato nova tabulka
>
> Pokud mam slozity dotaz
>
> select neco from joinovane tabulky where spousta podminek
> a jedna z nich je ten fulltextovy test
> contains(sloupec, 'vyraz') > nejake skore
>
> tak typicky chci primarne hledat podle toho fulltextu a pak joinovat
> se zbytkem. Tedy nejriv chci najit mezi milionem zaznamu ty tri, ktere
> odpovidaji vyrazu 'karel zak and mysql' a pak s tim vysledkem neco
> delat.
>
> Pokud budu tu funkci volat normalne, tak ji budu volat pro vsechny
> zaznamy, miliony. No good. Cili se snazim smerovat k tomu, ze by dosl
> ke transformaci toho puvodniho selectu na select
>
> select neco from joinovane tabulky where spousta podminek
> a id in ( select id from ta pomocna tabulka )
>
> A teprve tento dotaz by se pustil. Predtim by samozrejme nekdo musel
> udelat tu tabulku a naplnit ji vysledkem toho fulltextoveho hledani.
> Ale dalsi beh uz by byl rychly.
Asi nejkorektnejsi by to bylo jak psal Pavel J. --- udelat to na urovni
optimizeru (sakra to neni poradne ani v ang. ani cesky :-). Jinak
pochopitelne funkce bude volana pro kazdy zaznam, nadruhou stranu to muze
byt udelane tak, ze pri prvnim zavolani by si ta funkce udelala pozadovanou
temp tabulku a pri dalsich volanich by uz cerpala z ni.
> Myslel jsem, ze pokud vis, kde v PostgreSQL se prechazi od toho
> vstupniho retezce SQL k rozparsovane strukture, tak pote, co je
> rozparsovano, by melo byt mozno zavolat to externi plneni te pomocne
> tabulky a pak zmenit tu rozparsovanou strukturu tak, aby brala data
> z ni.
"The PostgreSQL path of query":
1/ parser
2/ transformace struktur na query tree
3/ rewriter (apikace view, rules..)
4/ planner
5/ executor
Todle plati pro SELECT/INSERT/DELETE/UPDATE, ostatni prikazy maji jako bod
3/ rovnou vykonani prikazu (napr. CREATE..)
Nekam az pred executor jsou to celkem autonomni a dost obecne struktury.
V soucasne dobe vim o cca 4 lidech schopnych neco *vice* predelavat na
bodech 3/4/5/ ...
Trosku problem bych vydel v nekoncepcnosti toho provedeni, ze nekde na
urovni bodu 3-4 by se melo uz neco vice delat s daty (ta temp tabulka)
IMHO to patri az do executoru. Ale zas tak moc tomu nerozumim :-)
(Ja se hrabu spise v pameti PG a trosku v date/time..)
> Je nejake URL? Vzhledem k tomu, jak ma PG blbe udelane blby nyni, tak
> bych tomu az tak moc neduveroval ;-)
Co ma spatne udelane?
Karel
Další informace o konferenci Databases