Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: CL | DM;

Вниз

Вот так оптимизатор..   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
2-1221641606
vegarulez
2008-09-17 12:53
2008.10.26
Вопрос про DBGrid.DataSource.DataSet.FieldValues[];


15-1220428472
clickmaker
2008-09-03 11:54
2008.10.26
Неверный запрос в "Начинающих"


2-1221589031
tubik
2008-09-16 22:17
2008.10.26
переопределение vs. сокрытие


2-1221721382
Mahno
2008-09-18 11:03
2008.10.26
Помогите с вычислением


2-1221833104
Alexei
2008-09-19 18:05
2008.10.26
Запуск приложения