Обновить
79
Sayan Malakshinov@xtender

FBCS, Oracle ACE, performance tuning expert

93
Подписчики
Отправить сообщение
Этим скриптом можно получить остальные trace event'ы: github.com/xtender/xt_scripts/blob/master/trace_events.sql
Ура! ASHViewer и на хабре! :)
Александр, молодец!
К слову, совсем недавно в Oracle-L я приводил пример, когда Join elimination наоборот приводит к худшему плану причем с большей стоимостью:
gist.github.com/xtender/f0871ffa99b1413232e6
— преобразование вложенных подзапросов в join (тоже есть отдельный хинт unnest / no_unnest).

Кстати, в этих примерах с exists/in/not in эта трансформация уже была: сначала выполняется subquery unnesting и только потом join elimination.
Есть еще полезная трансформация, похожая на оба этих случая — coalesce subquery (хинты COALESCE_SQ/NO_COALESCE_SQ)
Этот способ трансформации запроса впервые появился в Oracle 10.2, но в достаточно ограниченном виде. Он поддерживал только inner join, написанный в традиционном (не-ANSI) стиле Oracle.
Непонятно, что речь? Вообще-то почти все ANSI-запросы трансформируются оптимизатором оракла в оракловые(исключений немного: native full outer join и outer с предикатами по столбцам двух и более разных таблиц).
Больше похоже, что вы напоролись на какую-то недоделку, баг или трансформацию с латералами.
Строго говоря, и для join elimination есть хинты: ELIMINATE_JOIN / NO_ELIMINATE_JOIN
C 11g есть вьюха v$sql_hint, в ней можете посмотреть остальные хинты с подробной информацией.
Еще подбробнее можно с v$sql_feature: blog.tanelpoder.com/2013/04/01/understanding-what-a-hint-affects-using-the-vsql_feature-views/
я гольфил достаточно долго и много, совершенно разнообразных задач(и прямо тут на хабре даже один раз побеждал), но эта… просто феерически неинтересная.
неистово плюсую! задача реально настолько простая и лобовая, что и решать особо желания нет. хотя абсолютно уверено что у меня решение бы вместилось в стандартный однострочник( <=80 символов)
Hadoop-аналитика поверх данных
а под капотом этой documentDB не хадуп ли?
упс, вопрос отпал — туплю после отпуска…
96:
#!/usr/bin/perl -pla0F'\n'

$l=Erdos;$l=$l=~$F[0]?$r=$_:join$\,grep{"$_~$l"=~/(\b\w+\b).*~.*\b\1\b/}@F for 0..$#F;$_=$r//Inf
104:
$c=$F[0];$l=Erdos;$_=Inf;for$i(0..$#F){$l=$l=~$c?$_=$i:join" ",grep("$_~$l"=~/(\b\w+\b).*~.*\b\1\b/,@F)}
107:
#!/usr/bin/perl -pla0F'\n'

$c=$F[0];$l=Erdos;$_=Inf;for$i(0..$#F){$l=$_=$i if$l=~$c;@_=grep"$_~$l"=~/(\b\w+\b).*~.*\b\1\b/,@F;$l="@_"}
действительно оказывается у меня была ошибка копи-паста, исправил ошибку и еще сократил — теперь 108:
#!/usr/bin/perl -pla0F'\n'

$c=$F[0];$l=Erdos;$_=Inf;for$i(0..$#F){$l=$_=$i if$l=~$c;@_=grep{"$_~$l"=~/(\b\w+\b).*~.*\b\1\b/}@F;$l="@_"}
кстати спасибо про кавычки, теперь 124 :)
#!/usr/bin/perl -pla0F'\n'

$c=$F[0];$p[0]=Erdos;$_=Inf;for$i(0..@F){@_=grep{"$_~$p[$i]"=~/(\b\w+\b).*~.*\b\1\b/}@F;$p[$i+1]="@_"=~$c?($_=$i)&last:"@_"}
(: именно такой тест мне пришел в голову при просмотре первого же решения и про него я и говорил в этом комментарии: habrahabr.ru/company/regru/blog/235767/#comment_7944125
что-то у нас расходится:
> cat 1.pl
#!/usr/bin/perl -pla0F'\n'

$c=$F[0];$p[0]=Erdos;$_=Inf;for$i(0..@F){@_=grep{"$_~$p[$i]"=~/(\b\w+\b).*~.*\b\1\b/}@F;$p[$i+1]="@_"=~$c?($_=$i)&last:"@_"}
>
>
> cat tests/2.txt
Smith
Smith, Martin, Erdos: Newtonian forms of prime factor matrices
Erdos, Reisig: Stuttering in petri nets
Smith, Chen: First oder derivates in structured programming
Jablonski, Hsueh: Selfstabilizing data structures
>
>
> cat tests/2.txt | ./1.pl
1 >
А пример теста можно? По ссылке из топика все тесты проходит, поэтому я и отталкивался от этого, т.к. когда я придумал свой тест в первый раз, то половина решений из топика не проходили его.
таки вернулся к 126 :)

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность