Re[13]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 11:17
Оценка: +1
Здравствуйте, Arioch, Вы писали:

M>> Это противоречит и стандарту

A>Цитата под руками есть?
Ну про delete уже приводили, а общий случай искать лень, но это же очевидно.

M>> и здравому смыслу.

A>Есть зоть один сервер, где бы ни-че-го не противоречило здравому смыслу?
Ну практически все сервера, за исключением мелких недочетов, здравому смыслу не противоречат. Этот же недочет мелким не назовешь.

A>В данном случае, никаих вариантов последовательности нет.

Во-первых они потенциально возможны, а во вторых, я не считаю нормальной ситуацию, когда простейший self join может положить сервер напрочь.
Мы уже победили, просто это еще не так заметно...
Re[12]: Особенности Interbase
От: Arioch  
Дата: 19.03.04 11:17
Оценка:
Hello, Romkin!

R> Я уже выше привел выдержки из стандарта.


Когда я отвечал, их еще не было.

Кроме того они про delete ...where...,
а не про insert ... from select ...

--
[tip] Fix for Outlook Express quoting: http://Arioch.nm.ru/FL/Fidolook_SL.png
E-mail is faked because of spam. the_Arioch@NM.falseDomain.ru
Posted via RSDN NNTP Server 1.8 beta
Re[14]: Особенности Interbase
От: Arioch  
Дата: 19.03.04 11:19
Оценка:
Hello, Merle!

M> ситуацию, когда простейший self join может положить

Где тут join ???

И сервер не ляжет, он займет максимум места на таблицу/файл, потом скажет
облом и rollback.

Ну не хорошо, но грабли везде есть.

--
[tip] Fix for Outlook Express quoting: http://Arioch.nm.ru/FL/Fidolook_SL.png
E-mail is faked because of spam. the_Arioch@NM.falseDomain.ru
Posted via RSDN NNTP Server 1.8 beta
Re[15]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 11:30
Оценка:
Здравствуйте, Arioch, Вы писали:

A>Где тут join ???

self join — общий случай, когда оператор/ы замыкает отношение само на себя. Подозреваю, что проблемы могут быть не только с insert'ом

A>И сервер не ляжет, он займет максимум места на таблицу/файл, потом скажет

A>облом и rollback.
Ага, а процессор эта операция совсем не грузит? И очередь к диску не выстраивается? И время на откат этой кучи мусора и опять-таки дисковых операций не требуется?
При более-менее серьезной нагрузке такой запрос положит сервер на раз-два-три.

A>Ну не хорошо, но грабли везде есть.

Нифига себе — нехорошо... Это плохо...
Мы уже победили, просто это еще не так заметно...
Re[13]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 11:33
Оценка:
Здравствуйте, Romkin, Вы писали:

R>Почему ты так решил?

Я уже написал почему. Первое что делает оптимизатор — это путем перестановок операторов добивается более эффективного получения того же самого результата. А при такой ситуации особо не по переставляешь.

R>Оптимизатор нормально уже работает в FB.

"Не верю" (c)

R>Нет, это повод не писать диких запросов

Да какой он там дикий? Тут как по минному полю — шаг в сторону и все, баста карапузики...
Мы уже победили, просто это еще не так заметно...
Re[14]: Особенности Interbase
От: dimitr Россия  
Дата: 19.03.04 11:51
Оценка:
Здравствуйте, Merle, Вы писали:

R>> Оптимизатор нормально уже работает в FB.

M>
M> "Не верю" (c)

Правильнее будет сказать, что он стал заметно лучше. Если и тут не веришь, вызываю на дуэль

А насчет сабжа — весьма некузяво это, разумеется. Мягко говоря. Самое неприятное, что это не то, чтобы бага, а скорее "as designed"... И безболезненно сменить поведение будет ой как нелегко. Эээххх...
Re[14]: Особенности Interbase
От: Romkin  
Дата: 19.03.04 11:52
Оценка:
Здравствуйте, Merle, Вы писали:

M>Здравствуйте, Romkin, Вы писали:


R>>Почему ты так решил?

M>Я уже написал почему. Первое что делает оптимизатор — это путем перестановок операторов добивается более эффективного получения того же самого результата. А при такой ситуации особо не по переставляешь.

И что? Я переставляю. Нормально.

R>>Оптимизатор нормально уже работает в FB.

M>"Не верю" (c)

Не хочешь — не верь

R>>Нет, это повод не писать диких запросов

M>Да какой он там дикий? Тут как по минному полю — шаг в сторону и все, баста карапузики...

Ну-ну. За N лет работы с IB у меня впечатления работы сапером не было. В отличие от MSSQL, кстати, там для меня ужастики были (я посмотрел MSSQL6.5 и офигел в свое время).
Re[15]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 12:05
Оценка:
Здравствуйте, Romkin, Вы писали:

R>И что? Я переставляю. Нормально.

Хха.. Во-первых у тебя результат запроса будет другой, но, допустим, что ты переставил удачно... Но через полдня статистика поменялась и выгодным стал другой план запроса и, соответственно, порядок выполнения операторов.
Чего делать будешь? Опять менять?
Мы уже победили, просто это еще не так заметно...
Re[16]: Особенности Interbase
От: Romkin  
Дата: 19.03.04 12:27
Оценка:
Здравствуйте, Merle, Вы писали:

M>Здравствуйте, Romkin, Вы писали:


R>>И что? Я переставляю. Нормально.

M>Хха.. Во-первых у тебя результат запроса будет другой, но, допустим, что ты переставил удачно... Но через полдня статистика поменялась и выгодным стал другой план запроса и, соответственно, порядок выполнения операторов.
M>Чего делать будешь? Опять менять?

Млин, не так переставляю

  for select ID
    from TEST1
    GROUP BY ID
    HAVING count(ID) > 1
    into :ID
  do
    delete from TEST1 where ID = :ID;


Вроде этого
Re[17]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 12:42
Оценка:
Здравствуйте, Romkin, Вы писали:

R>Млин, не так переставляю

И так каждый раз? Здесь я говорю уже не о конкретном примере. Оптимизатор в принципе не может свободно менять порядок операторов, потому что это может привести к искажению результата...
То есть в IB, по прежнему, приходится жестко прописывать запросы хинтами, что не есть гуд.
Мы уже победили, просто это еще не так заметно...
Re[18]: Особенности Interbase
От: Romkin  
Дата: 19.03.04 12:48
Оценка:
Здравствуйте, Merle, Вы писали:

M>Здравствуйте, Romkin, Вы писали:


R>>Млин, не так переставляю

M>И так каждый раз? Здесь я говорю уже не о конкретном примере. Оптимизатор в принципе не может свободно менять порядок операторов, потому что это может привести к искажению результата...
M>То есть в IB, по прежнему, приходится жестко прописывать запросы хинтами, что не есть гуд.

Никаких хинтов Зачем? При таком написании оптимизатор подключит оптимальный индекс в том и другом запросе.
И так каждый раз. Нету у меня в БД вложенных подзапросов и очень мало джойнов. VIEW нет совершенно, вместо них select SP. Так повелось еще с IB 5.6, максимальная скорость и оптимальный план. Дело в том, что в IB получить набор записей из SP — раз плюнуть
Re[19]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 12:56
Оценка:
Здравствуйте, Romkin, Вы писали:

R> Нету у меня в БД вложенных подзапросов и очень мало джойнов.

Счастливчик..
Довольно большой процент задач можно свести к простым запросам, но как правило, хороший оптимизатор спарвляется с этим эффективнее.
Мы уже победили, просто это еще не так заметно...
Re[20]: Особенности Interbase
От: Romkin  
Дата: 19.03.04 13:17
Оценка:
Здравствуйте, Merle, Вы писали:

M>Здравствуйте, Romkin, Вы писали:


R>> Нету у меня в БД вложенных подзапросов и очень мало джойнов.

M>Счастливчик..
M>Довольно большой процент задач можно свести к простым запросам, но как правило, хороший оптимизатор спарвляется с этим эффективнее.

Дык их нет потому, что я их разворачиваю в for select. И получается весьма неплохо.
Например, есть документ DOC, в нем Client_ID со ссылкой на CLIENT(ID, name). Ессно, хочется запрос (допустим):
select DOC.NUM, DOC.Client_ID, CLIENT.name as Client_name
  from DOC left join CLIENT on DOC.Client_ID = CLIENT.Client_ID
  where DOC.NUM = :FNUM;

Так?
create procedure LIST_DOC (FNUM integer)
returns (NUM integer, Client_ID integer, Client_Name varchar(100))
as
begin
  for select NUM, Client_ID
    from DOC
    where DOC.NUM = :FNUM
    into :NUM, :Client_ID
  do begin
    Client_Name = NULL;
    select name from client
    where Client_ID = :Client_ID;
    suspend;
  end
end;

А так? Вызов примитивен: Select * from LIST_DOC(:FNUM), но при наличии многих джойнов (а не одного, как здесь) план будет гораздо эффективнее во втором случае. Соответственно, выигрыш в скорости — в разы.
Так уж устроен оптимизатор в IB, он действительно примитивен. Ждем FB2
Re[15]: Особенности Interbase
От: _MarlboroMan_ Россия  
Дата: 19.03.04 13:24
Оценка:
Здравствуйте, dimitr, Вы писали:

D>А насчет сабжа — весьма некузяво это, разумеется. Мягко говоря. Самое неприятное, что это не то, чтобы бага, а скорее "as designed"... И безболезненно сменить поведение будет ой как нелегко. Эээххх...


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

это же пинцет какой-то. и это в простых случаях! а ежели три вложенных друг в друга? ужас!
... << RSDN@Home 1.1.3 beta 1 >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[16]: Особенности Interbase
От: Romkin  
Дата: 19.03.04 13:32
Оценка:
Здравствуйте, _MarlboroMan_, Вы писали:

_MM_>Здравствуйте, dimitr, Вы писали:


_MM_>а как насчет маштабируемости? ежели подзапрос "перевыполняется" на "каждом шаге"?


_MM_>это же пинцет какой-то. и это в простых случаях! а ежели три вложенных друг в друга? ужас!


Как правило, вложенный запрос зависит от внешнего Если не зависит — его просто надо вынести в наружный цикл. И получается кузяво
Re[21]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 13:41
Оценка:
Здравствуйте, Romkin, Вы писали:

R>А так? Вызов примитивен: Select * from LIST_DOC(:FNUM), но при наличии многих джойнов (а не одного, как здесь) план будет гораздо эффективнее во втором случае. Соответственно, выигрыш в скорости — в разы.

R>Так уж устроен оптимизатор в IB, он действительно примитивен. Ждем FB2
Пипец... Это покруче хинтов, ты по сути, полностью прописываешь ход выполнения запроса не оставляя серверу ни шанса вмешаться. Дааа....
А ведь встречаются ситуации, когда Hash или Merge join в десятки, если не в сотни раз выгоднее, и фиг ты это дело сэмулируешь на таких циклах. Да банально, оптимальный порядок объединения таблиц может меняться вообще от запроса к запросу...
А ты еще на MS 6.5 жаловался, нет, ребята IB — это для маньяков..
Мы уже победили, просто это еще не так заметно...
Re[22]: Особенности Interbase
От: Romkin  
Дата: 19.03.04 14:03
Оценка:
Здравствуйте, Merle, Вы писали:

M>Пипец... Это покруче хинтов, ты по сути, полностью прописываешь ход выполнения запроса не оставляя серверу ни шанса вмешаться. Дааа....

M>А ведь встречаются ситуации, когда Hash или Merge join в десятки, если не в сотни раз выгоднее, и фиг ты это дело сэмулируешь на таких циклах. Да банально, оптимальный порядок объединения таблиц может меняться вообще от запроса к запросу...
M>А ты еще на MS 6.5 жаловался, нет, ребята IB — это для маньяков..

Когда join быстрее получается — делаю его. Не догма. Выбирается то, что быстрее.
Re[23]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 14:05
Оценка:
Здравствуйте, Romkin, Вы писали:

R> Когда join быстрее получается — делаю его. Не догма. Выбирается то, что быстрее.

Дык в том-то и засада, что сейчас быстрее один join, а через полчаса другой... Не на выбираешься.
Мы уже победили, просто это еще не так заметно...
Re[24]: Особенности Interbase
От: Alex.Che  
Дата: 19.03.04 14:08
Оценка:
Привет, Merle!
Вы пишешь 19 марта 2004:

R>> Когда join быстрее получается — делаю его. Не догма. Выбирается то, что быстрее.

M> Дык в том-то и засада, что сейчас быстрее один join, а через полчаса другой... Не на выбираешься.

Тут ты не прав. Давайте обсуждать вкусовые качества устриц с теми кто их пробовал ;о)

--
With best regards, Alex Cherednichenko.
Posted via RSDN NNTP Server 1.8 beta
Re[25]: Особенности Interbase
От: Merle Австрия http://rsdn.ru
Дата: 19.03.04 14:11
Оценка:
Здравствуйте, Alex.Che, Вы писали:

AC>Тут ты не прав. Давайте обсуждать вкусовые качества устриц с теми кто их пробовал ;о)

Ты про каких устриц? И в чем я не прав?
Хочешь сказать, что в большинстве систем оптимальный план большинства запросов определяетя на этапе разработки?
Так не бывает.
Мы уже победили, просто это еще не так заметно...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.