Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
ВнизВот так оптимизатор.. Найти похожие ветки
← →
Vlad Oshin © (2008-09-19 16:36) [0]выбираем все из первых двух таблиц
select
can_detail.*,
all_labels_type.*
from
cash.all_labels_type,
cash.can_detail
20 строк, 0.25 секунд
-------------------------------------
select
can_detail.*,
all_labels_type.*
from
cash.all_labels_type,
cash.can_detail,
cash.canister, -- просто перечислено еще таблиц
cash.checkdetail, --
cash.checkheader; --
20 строк, 157 секунд
ORACLE, PL/SQl developer
Почему так, он что не понимает что там нечего искать, префикс строк в select указан же
← →
Jeer © (2008-09-19 16:44) [1]Я тебе так скажу, лучше всего топориком, ружья..они того, могут и осечку дать.
← →
Правильный$Вася (2008-09-19 16:48) [2]картезиан сначала строит, а уж потом поля нужные берет
все то, что ты просил
← →
Поросенок Винни-Пух © (2008-09-19 17:18) [3]Почему так, он что не понимает что там нечего искать, префикс строк в select указан же
а здесь он по твоему ни единицу, ни судату не должен был выбрать?
select 1,sysdate from table1,table2
:)
← →
stas © (2008-09-19 17:24) [4]Vlad Oshin © (19.09.08 16:36)
Ну, откуда оптимизатору знать что ты эти таблицы присоединил просто так?
А чего 20 строк остальные таблицы пустые? должна была быть прогрессия.
← →
Правильный$Вася (2008-09-19 17:31) [5]
> А чего 20 строк остальные таблицы пустые?
он не делал полного фетча наверняка
это то, что на экран поместилось
← →
Vlad Oshin © (2008-09-19 17:35) [6]
> картезиан сначала строит, а уж потом поля нужные берет
ну и дурь..
> откуда оптимизатору знать что ты эти таблицы присоединил
> просто так?
Да блин, если я говорю, дай мне все что в бочке A из бочек A и B,
то зачем бочку B вообще трогать?
> А чего 20 строк остальные таблицы пустые?
нет!
select
1
from
cash.all_labels_type,
cash.can_detail,
cash.canister, -- просто перечислено еще таблиц
cash.checkdetail, --
cash.checkheader; --
Выбирает пока, вторая минута пошла..
← →
stas © (2008-09-19 17:39) [7]хм. Смотри у меня есть таблица в ней 5 записей, и есть таблица в ней 20 записей, а нужно мне наполнить 3-ю таюлицу 100 записями, со значениями и 2-й таблицы, я пишу
Insert into table3(Field1,Field2...Fieldn)
Select table2.Field1, ... from table1,table2
← →
ANB (2008-09-19 17:46) [8]
> Vlad Oshin © (19.09.08 17:35) [6]
>
> > картезиан сначала строит, а уж потом поля нужные берет
>
> ну и дурь..
Не дурь, а стандарт SQL.
← →
Vlad Oshin © (2008-09-19 17:49) [9]
> он не делал полного фетча наверняка
> это то, что на экран поместилось
мне в строке статуса так сказал PL/SQl developer
20 строк, 0.25 секунд
20 строк, 157.не_помню секунд
> хм. Смотри у меня есть таблица в ней 5 записей, и есть таблица
> в ней 20 записей, а нужно мне наполнить 3-ю таюлицу 100
> записями, со значениями и 2-й таблицы, я пишу
> Insert into table3(Field1,Field2...Fieldn)
> Select table2.Field1, ... from table1,table2
пойду помедитирую
← →
Matveih1 © (2008-09-19 17:49) [10]Помоему это дурь программиста который в запросе указывает таблицы которые в запросе не нужны. Оптимизатор строит запрос ничего не подозревая о тех данных которые в итоге надо вывести. Оптимизатор смотрит на секцию From и Where и уже потом из всего отобранного выдает то что написано в select.
← →
ANB (2008-09-19 17:49) [11]Кстати, оптимизатор тут совсем не причем. Он исправлением дури программистов не занимается.
← →
Matveih1 © (2008-09-19 17:51) [12]все верно. Он пытается ее оптимизировать
← →
Vlad Oshin © (2008-09-19 17:51) [13]
> Не дурь, а стандарт SQL.
просто читал, что оптимизатор в О очень интеллектуальный.
но вот теперь сомнения появились
← →
Matveih1 © (2008-09-19 17:56) [14]Vlad Oshin попробуй не зная о том что и итоге надо выдать прочитать все таблицы без какого либо условия и потом только показать 20 строк. Как это сделать оптимально? Только сканом по таблицам. Если добавиш условие то все пройдет намного быстрее
← →
Vlad Oshin © (2008-09-19 17:57) [15]
> Оптимизатор смотрит на секцию From и Where и уже потом из
> всего отобранного выдает
т.е., вот так нормально по 2 митнуты считать?
select
1
from
cash.all_labels_type,
cash.can_detail,
cash.canister, -- просто перечислено еще таблиц
cash.checkdetail, --
cash.checkheader; --
ДУРЬ! И больших денег стоит еще.. Надо и там смотреть и тут, в select
> Помоему это дурь программиста который в запросе указывает
> таблицы которые в запросе не нужны
это дурь пользователя, который строит визуальным средством запрос
← →
Vlad Oshin © (2008-09-19 17:59) [16]Matveih1 почему я не должен знать select const?
это бы первое, что я прописал в серваке.
Ибо, предположил бы, что запросы составляются программно, и такая ошибка вполне может произойти
← →
ANB (2008-09-19 18:00) [17]
> просто читал, что оптимизатор в О очень интеллектуальный.
>
> но вот теперь сомнения появились
Он действительно интеллектуальный. Правда, чтобы он работал корректно, нужен вменяемый ДБА.
Однако здесь вовсе не "тупость" оптимизатора, а полная дурь программиста.
Написав во фроме несколько таблиц и не связав их, ты явно дал понять ораклу, что хочешь получить кортезиан (т.е. декартово пересечение всех таблиц). То, что поля ты указал не из всех таблиц ничего не значит - кортезиан определяет количество строк в запросе. Все это описано в стандарте SQL.
А вот то, что ты уже получил, оптимизатор пытается оптимизить так, чтобы работало побыстрее (строит наиболее подходящий план выполнения запроса). Сам запрос он править не имеет права.
← →
ANB (2008-09-19 18:04) [18]
> т.е., вот так нормально по 2 митнуты считать?
> select
> 1
> from
> cash.all_labels_type,
> cash.can_detail,
> cash.canister, -- просто перечислено еще таблиц
> cash.checkdetail, --
> cash.checkheader; --
>
> ДУРЬ! И больших денег стоит еще.. Надо и там смотреть и
> тут, в select
Вот так нормально и неделю считать. Если в каждой таблице по 1000 записей ты хочешь получить 1000^5 записей. Пусть и с одной колонкой и 1 в качестве значения.
> это дурь пользователя, который строит визуальным средством
> запрос
Это таки дурь программиста, написавшего визуальное средство.
Кстати, лицензия на полный оракл 10G стоит около 700 баксов с правом на тех.поддержку.
Разве это очень дорого ?
← →
ANB (2008-09-19 18:07) [19]
> Ибо, предположил бы, что запросы составляются программно,
> и такая ошибка вполне может произойти
Все извращения юзеров (а программа, криво составляющая запросы - тот же тупой юзер) не предусмотришь. Разработчики СУБД (кстати, все SQL СУБД в таком случае поведут себя одинаково - т.е. построят кортезиан) могут отправить только к книжкам, в которых написано, как сервер должен понимать запросы. Потому что кортезиан иногда НУЖНО строить вполне сознательно. И такой синтаксис для этого и предназначен.
← →
Правильный$Вася (2008-09-19 18:09) [20]
> Vlad Oshin ©
если ты не понимаешь, что должен получить в ответ, то это твои проблемы, а не оптимизатора
что ты ему сказал выдать, то он и выдал
как говорится "программа делает не то, что вы хотели, а то, что вы сказали ей делать"
кстати, картезиан (ANB уже упомянул) дает умножение числа записей в выборке на то число, сколько записей в очередной присовокупляемой таблице
в твоем варианте просто будут дубли, т.к. часть полей (которые и дают отсутствие дублей) просто не показывается
так что учи матчасть
> > он не делал полного фетча наверняка это то, что на экран поместилось
> мне в строке статуса так сказал PL/SQl developer
он не фетчит все, нажмешь двойную зеленую стрелку над датасетом, получишь все
← →
Anatoly Podgoretsky © (2008-09-19 18:23) [21]Vlad Oshin © (19.09.08 16:36)
Просто тут еще нужна и сковорода, без нее не работает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c