Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вот так оптимизатор..


Страницы:   1 2

Vlad Oshin ©   (2008-09-19 16:36:00) 

выбираем все из первых двух таблиц

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 указан же


Anatoly Podgoretsky   (2008-09-19 18:23:00) [1]

Vlad Oshin ©   (19.09.08 16:36)  
Просто тут еще нужна и сковорода, без нее не работает.


Правильный$Вася   (2008-09-19 18:09:00) [2]


> Vlad Oshin ©

если ты не понимаешь, что должен получить в ответ, то это твои проблемы, а не оптимизатора
что ты ему сказал выдать, то он и выдал
как говорится "программа делает не то, что вы хотели, а то, что вы сказали ей делать"

кстати, картезиан (ANB уже упомянул) дает умножение числа записей в выборке на то число, сколько записей в очередной присовокупляемой таблице
в твоем варианте просто будут дубли, т.к. часть полей (которые и дают отсутствие дублей) просто не показывается

так что учи матчасть

> > он не делал полного фетча наверняка это то, что на экран  поместилось
> мне в строке статуса так сказал PL/SQl developer

он не фетчит все, нажмешь двойную зеленую стрелку над датасетом, получишь все


ANB   (2008-09-19 18:07:00) [3]


> Ибо, предположил бы, что запросы составляются программно,
>  и такая ошибка вполне может произойти

Все извращения юзеров (а программа, криво составляющая запросы - тот же тупой юзер) не предусмотришь. Разработчики СУБД (кстати, все SQL СУБД в таком случае поведут себя одинаково - т.е. построят кортезиан) могут отправить только к книжкам, в которых написано, как сервер должен понимать запросы. Потому что кортезиан иногда НУЖНО строить вполне сознательно. И такой синтаксис для этого и предназначен.


ANB   (2008-09-19 18:04:00) [4]


> т.е., вот так нормально по 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:00:00) [5]


> просто читал, что оптимизатор в О очень интеллектуальный.
>  
> но вот теперь сомнения появились

Он действительно интеллектуальный. Правда, чтобы он работал корректно, нужен вменяемый ДБА.

Однако здесь вовсе не "тупость" оптимизатора, а полная дурь программиста.

Написав во фроме несколько таблиц и не связав их, ты явно дал понять ораклу, что хочешь получить кортезиан (т.е. декартово пересечение всех таблиц). То, что поля ты указал не из всех таблиц ничего не значит - кортезиан определяет количество строк в запросе. Все это описано в стандарте SQL.

А вот то, что ты уже получил, оптимизатор пытается оптимизить так, чтобы работало побыстрее (строит наиболее подходящий план выполнения запроса). Сам запрос он править не имеет права.


Vlad Oshin   (2008-09-19 17:59:00) [6]

Matveih1 почему я не должен знать select const?
это бы первое, что я прописал в серваке.

Ибо, предположил бы, что запросы составляются программно, и такая ошибка вполне может произойти


Vlad Oshin   (2008-09-19 17:57:00) [7]


> Оптимизатор смотрит на секцию From и Where и уже потом из
> всего отобранного выдает

т.е., вот так нормально по 2 митнуты считать?
select
     1
from      
    cash.all_labels_type,
    cash.can_detail,
      cash.canister,    -- просто перечислено еще таблиц
      cash.checkdetail, --
      cash.checkheader; --

ДУРЬ! И больших денег стоит еще.. Надо и там смотреть и тут, в select


> Помоему это дурь программиста который в запросе указывает
> таблицы которые в запросе не нужны

это дурь пользователя, который строит визуальным средством запрос


Matveih1   (2008-09-19 17:56:00) [8]

Vlad Oshin попробуй не зная о том что и итоге надо выдать прочитать все таблицы без какого либо условия и потом только показать 20 строк. Как это сделать оптимально? Только сканом по таблицам. Если добавиш условие то все пройдет намного быстрее


Vlad Oshin   (2008-09-19 17:51:00) [9]


> Не дурь, а стандарт SQL.

просто читал, что оптимизатор в О очень интеллектуальный.
но вот теперь сомнения появились


Matveih1   (2008-09-19 17:51:00) [10]

все верно. Он пытается ее оптимизировать


ANB   (2008-09-19 17:49:00) [11]

Кстати, оптимизатор тут совсем не причем. Он исправлением дури программистов не занимается.


Matveih1   (2008-09-19 17:49:00) [12]

Помоему это дурь программиста который в запросе указывает таблицы которые в запросе не нужны. Оптимизатор строит запрос ничего не подозревая о тех данных которые в итоге надо вывести. Оптимизатор смотрит на секцию From и Where и уже потом из всего отобранного выдает то что написано в select.


Vlad Oshin   (2008-09-19 17:49:00) [13]


> он не делал полного фетча наверняка
> это то, что на экран поместилось

мне в строке статуса так сказал 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

пойду помедитирую


ANB   (2008-09-19 17:46:00) [14]


> Vlad Oshin ©   (19.09.08 17:35) [6]
>
> > картезиан сначала строит, а уж потом поля нужные берет
>
> ну и дурь..

Не дурь, а стандарт SQL.


stas   (2008-09-19 17:39:00) [15]

хм. Смотри у меня есть таблица в ней 5 записей, и есть таблица в ней 20 записей, а нужно мне наполнить 3-ю таюлицу 100 записями, со значениями и 2-й таблицы, я пишу
Insert into table3(Field1,Field2...Fieldn)
Select table2.Field1, ... from table1,table2


Vlad Oshin   (2008-09-19 17:35:00) [16]


> картезиан сначала строит, а уж потом поля нужные берет

ну и дурь..


> откуда оптимизатору знать что ты эти таблицы присоединил
> просто так?

Да блин, если я говорю, дай мне все что в бочке A из бочек A и B,
то зачем бочку B вообще трогать?


> А чего 20 строк остальные таблицы пустые?

нет!

select
      1
from      
     cash.all_labels_type,
     cash.can_detail,
       cash.canister,    -- просто перечислено еще таблиц
       cash.checkdetail, --
       cash.checkheader; --
Выбирает пока, вторая минута пошла..


Правильный$Вася   (2008-09-19 17:31:00) [17]


> А чего 20 строк остальные таблицы пустые?

он не делал полного фетча наверняка
это то, что на экран поместилось


stas   (2008-09-19 17:24:00) [18]

Vlad Oshin ©   (19.09.08 16:36)
Ну, откуда оптимизатору знать что ты эти таблицы присоединил просто так?
А чего 20 строк остальные таблицы пустые? должна была быть прогрессия.


Поросенок Винни-Пух   (2008-09-19 17:18:00) [19]

Почему так, он что не понимает что там нечего искать, префикс строк в select указан же

а здесь он по твоему ни единицу, ни судату не должен был выбрать?

select 1,sysdate from table1,table2

:)


Правильный$Вася   (2008-09-19 16:48:00) [20]

картезиан сначала строит, а уж потом поля нужные берет
все то, что ты просил


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо