Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.005 c
2-1221737311
Int23
2008-09-18 15:28
2008.10.26
Как сохранить содержимое буфера обмена и восстановить


4-1198653645
Rav
2007-12-26 10:20
2008.10.26
Как опеределить язык GUI Windows!!! Не GetSystemDefaultLCID!!!


15-1220271337
zorik
2008-09-01 16:15
2008.10.26
Построение поверхности за границами изолиний


2-1221668340
Drowsy
2008-09-17 20:19
2008.10.26
Как из базы IB вытянуть список несистемных таблиц?


2-1221815015
cruiser
2008-09-19 13:03
2008.10.26
Отлов нажатия определенной комбинации клавиш





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский