Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6 7 8   вперед  Ctrl      все
 Re: О временных таблицах замолвите слово...  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Потом появились переменные типа table и необходимость даже в локальных врем таблицах еще больше снизилась

Недавно создавал для обсуждения такой топик в соседнем форуме по MSSQL.
Лично мои эксперименты показали, что почему-то переменные типа table работают оч-ч-чень медленно по сравнению с врем таблицами. Не знаю почему !
Многократно проверялось на 100000 узких записей.

Про курсоры (MSSQL): буквально вчера писал, что при умном использовании они могут дать огромный выигрыш. Даже пробегая по тысячам строк. Чесно говоря даже не думал, что эффект может быть таким сильным. :)

PS: безусловно и тем и другим не стоит увлекаться. Но если по уму, то можно :)
23 дек 04, 17:55    [1205742]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
Alex.Czech
Именно это. GTT не очень нравятся тем что при широком использовании этой фичи их будет очень много и они будут засорять взор при просмотре объектов БД

Вопрос в том, что они не менее важны, чем другие объекты БД. А "как правильно организовать большую кучу объектов" - сложный, но более или менее решаемый вопрос. Например, можно разнести по схемам.

В моем любимом PL/SQL Developer есть удобно настраиваемые фильтры - то есть, я могу, например, легко убрать эти таблицы из общего списка.
23 дек 04, 18:17    [1205804]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
Alex.Czech
скажу, что не знаю до сих пор как из ADO получить результат выполнения PL/SQL-функции, не говоря уж о том что ADO не поддерживает параметры типа NESTED TABLE

У меня есть впечатление, что к Ораклу не стоит лазить через ADO (и кроссплатформенность тут не при чем). Но вне зависимости от этого - я совершенно уверен, что это возможно.

Alex.Czech
б) PIPELINED глючит, причем иногда ужасно... я лично имел пример PIPELINED-функции, которая при попытке использования в довольно извращенном виде (SELECT (SELECT * FROM t1 INNER JOIN fn(..) where t1.fid =

Насчет "ужасно" - полагаю, некоторый перебор. Я помню одну ошибку, упомянутую на металинке - скорее всего, Ваш случай; сложный запрос и pipelined, получающая входные параметры из полей запроса.

Alex.Czech
Оракл хороший, но кой-какие вещи и в нем делаются через жо, особенно когда надо поддержать кросс-плафторменность хотя бы в минимальном объеме (а нам тут надо)

Хм. Тут уже был топик насчет "не нужно знать конкретную СУБД". Суть моего мнения - кроссплатформенность нужно делать, используя гибкие провайдеры и преимущества каждой из платформ. Пытаться использовать "технологии, которые работают везде" - например, использовать то же ADO для коннекта к любой из баз - сомнительный подход (допустимый, только если "действительно хорошо работает везде").
23 дек 04, 18:24    [1205824]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
Alex.Czech
Guest
softwarer
Alex.Czech
б) PIPELINED глючит, причем иногда ужасно... я лично имел пример PIPELINED-функции, которая при попытке использования в довольно извращенном виде (SELECT (SELECT * FROM t1 INNER JOIN fn(..) where t1.fid =

Насчет "ужасно" - полагаю, некоторый перебор. Я помню одну ошибку, упомянутую на металинке - скорее всего, Ваш случай; сложный запрос и pipelined, получающая входные параметры из полей запроса.


Именно он и есть... и лично для меня когда от ошибки срубается коннекция и ее никак не обойти легким потряхиванием бубна - это ужасно :)

Насчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально
23 дек 04, 18:27    [1205830]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
Alex.Czech
Насчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально

Хм. У меня нет практического опыта такого - но мне представляется, что затраты на "заставить Оракл и MSSQL одинаково работать" и на "сделать промежуточный уровень" вполне сравнимы при заведомо лучшем результате второго.

Скажем, говоря о селекте - если это проблема, я бы сделал объект "выбиральщик из функции", который делает EXEC для MSSQL и select from table() для Oracle (либо использует ref cursor, либо еще как-нибудь). Перевести проект на использование такого объекта - тривиальная техническая операция, даже если инструмент потребует выполнить прорву тупой работы; а вот искать какое-то "общее решение" - порождает принципиальные проблемы и принципиальную же кривизну.
23 дек 04, 18:38    [1205855]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
Alex.Czech
Именно он и есть... и лично для меня когда от ошибки срубается коннекция и ее никак не обойти легким потряхиванием бубна - это ужасно :)

Насколько я помню, для той ошибки есть патч. Впрочем - я согласен с тем, что от последних версий оракла хотелось бы большей устойчивости.
23 дек 04, 18:39    [1205860]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
Alex.Czech
Guest
softwarer
Alex.Czech
Насчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально

Хм. У меня нет практического опыта такого - но мне представляется, что затраты на "заставить Оракл и MSSQL одинаково работать" и на "сделать промежуточный уровень" вполне сравнимы при заведомо лучшем результате второго.

Скажем, говоря о селекте - если это проблема, я бы сделал объект "выбиральщик из функции", который делает EXEC для MSSQL и select from table() для Oracle (либо использует ref cursor, либо еще как-нибудь). Перевести проект на использование такого объекта - тривиальная техническая операция, даже если инструмент потребует выполнить прорву тупой работы; а вот искать какое-то "общее решение" - порождает принципиальные проблемы и принципиальную же кривизну.


Да так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :)
23 дек 04, 18:40    [1205863]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
Alex.Czech
Да так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :)

Так это и есть начало того самого "гибкого провайдера". Повторить N раз - и окажется, что приложение работает на уровне собственных объектов. Разумеется, проектировать эти объекты тоже стоит с применением головы :)

Вообще, собственные объекты - большой плюс. В дельфе вполне можно было не спешить с такой практикой, но перейдя на джаву, я довольно быстро начал любому стандартному классу тут же делать свою тривиальную обертку. Затраты - копеечные, зато потом все вскрывшиеся недостатки элементарно дорабатываются.
23 дек 04, 18:46    [1205879]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
Alex.Czech
Guest
softwarer
Alex.Czech
Да так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :)

Так это и есть начало того самого "гибкого провайдера". Повторить N раз - и окажется, что приложение работает на уровне собственных объектов. Разумеется, проектировать эти объекты тоже стоит с применением головы :)

Вообще, собственные объекты - большой плюс. В дельфе вполне можно было не спешить с такой практикой, но перейдя на джаву, я довольно быстро начал любому стандартному классу тут же делать свою тривиальную обертку. Затраты - копеечные, зато потом все вскрывшиеся недостатки элементарно дорабатываются.


Это уже не начало... это уже апофеоз :) Гибкий провайдер был гибким и когда еще с одной СУБД только умел работать. Проблема в том что невозможно написать сферический гибкий провайдер в вакууме и под первую СУБД всегда слегка подзатачиваешься, к сожалению... я повторюсь, что я не ставил целью сказать что Оракл плохой ни в коем случае, просто обрисовал для каких нужд в MS SQL используют временные таблицы, и сказал, что в Оракле аналогичного механизма нет. Может, он и не нужен никому, кроме меня... в принципе, он и мне уже не особо нужен :)
23 дек 04, 18:56    [1205905]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
tygra
Ну та же временная (или и переменная таблица в MS SQL) таблица получается.

Не совсем. Разница в том, что ее тип таки задается в правильном месте, а дальше употребляется локальный экземпляр этого типа. В MSSQL же, как я понимаю, используется что-то типа анонимных вложенных классов - на ходу определили и используем - но при этом этот объект еще и доступен снаружи (из других подпрограмм, с клиента) и этим пользуются. Имхо - это совершенно некорректно (хотя, конечно, можно и в такой системе придерживаться только корректных решений).

Поэтому я изначально и сказал - то же самое по возможностям, но более корректная реализация.
23 дек 04, 19:01    [1205914]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
>> но при этом этот объект еще и доступен снаружи (из других подпрограмм, с клиента) и этим пользуются

Недоступен локальный объект снаружи, чем и пользуются. :) Объект доступен только внутри, но не снаружи.
23 дек 04, 19:03    [1205919]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
Alex.Czech
просто обрисовал для каких нужд в MS SQL используют временные таблицы, и сказал, что в Оракле аналогичного механизма нет.

Ээ.. Возможно, я не совсем понял, но мне показалось, что он таки есть - просто Вы испытываете некоторые проблемы с ADO (в котором, возможно, нет корректного решения для работы с оракловым механизмом).
23 дек 04, 19:04    [1205923]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
К сожалению, насколько мне известно, ADO наиболее прямой метод доступа в отношении MSSQL, но он далеко не так прям по отношению к Oracle
23 дек 04, 19:08    [1205930]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
www.fun4me.narod.ru
Недоступен локальный объект снаружи, чем и пользуются. :) Объект доступен только внутри, но не снаружи.

Мне казалось, что временные таблицы в MSSQL - объекты сессионного уровня видимости. Я ошибался?

А как тогда решается вопрос с их явной или неявной передачей между подпрограммами? В Оракле такую "совсем локальную" таблицу можно было бы делать видимой внутри пакета, но в MSSQL вроде бы пакетов нет. Соответственно - вопрос решается или приходится искусственно стягивать код в одну подпрограмму?
23 дек 04, 19:09    [1205932]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Таблицы созданные в сессии доступны на уровне сессии и во всех процедурах, которые вызываемы из сессии (вряд ли очень уж кому нужно), но при этом могут быть переопределены в процедурых, вызываемых из сессии.

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

То есть, там стэк из таблиц получается.
23 дек 04, 19:13    [1205945]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
>>Таблицы ....

Имелись ввиду временные #таблицы.
23 дек 04, 19:14    [1205948]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67447
Блог
www.fun4me.narod.ru
Таблицы, созданные в процедурах доступны только для процедуры и для всех процедур, вызываемых из данной процедуры (редко используется) и уничтожаются по завершении процедуры.

Понятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже.
23 дек 04, 19:24    [1205960]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Ну как же Вы можете об этом судить когда только что про это узнали?

softwarer
Самое простое - запихнуть эти промежуточные результаты в nested table. Это тип данных, относящийся к "коллекциям" Оракла. Их удобство в том, что с ними можно работать как select-ами, так и обычным программным синтаксисом - доступ по индексу, изменение данных, удаление строки итп.

Можно чуть попобробней что такое nested table и как с ними можно работать? Хотелось бы примерчик какой
24 дек 04, 10:00    [1206647]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
автор
Понятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже.

Тогда назовите отличия от Оракла - практически один в один получается. Только называется по-разному.
Или заранее считается, что у MS все хуже? ;))

-- Tygra's --
24 дек 04, 11:12    [1206907]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
действительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно.
24 дек 04, 11:25    [1206970]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
автор
действительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно.

А теперь по-русски объясните, что вы там делаете, что компилите, как стараетесь....
При таком подходе естественно все будет геморройно.

-- Tygra's --
24 дек 04, 11:31    [1206993]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
tygra
автор
Понятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже.

Тогда назовите отличия от Оракла - практически один в один получается. Только называется по-разному.
Или заранее считается, что у MS все хуже? ;))

-- Tygra's --

Отличия только в том, что у Оракла есть опции, определяющие, что делать с содержанием времянки на COMMIT - очищать ее или же сохранять записи. У ASA в 9-ке помимо этого еще ввели NOT TRANSACTIONAL, которое указывает, что времянке абсолютно почхать на транзакции и в не зависимости ROLLBACK/COMMIT записи в ней остаются в существующем состоянии. Это очень логично, особенно если учесть, что времянки в основном обьявляются в пределах какого то блока видимости, автоматом удаляются при выходе из этого блока и в основном не задействуются в транзакциях. Зато это дает существенный выигрыш в скорости работы DML с ними. Насколько я помню (хотя уже точно сказать не могу), у MSSQL времянки, обьявленные как DECLARE TABLE ведут себя фактически так же и поэтому обгоняют в скорости обычные времянки.

Мне кажется тут гораздо интереснее сравнить не сколько функциональность времянок, а архитектуру их работы. У MSSQL времянки лежат в TempDB, которая фактически является полноценной БД. У ASA в понятии архитектуры база данных одна - то есть нет Master и TempDB - все пользователи, опции и права доступа находяться в самой БД, а промежуточная и временная информация храниться в временных файлах собственного формата в указанной для этих целей директории - собственный формат хранения (а не БД) такой информации кстати здорово увеличивает скорость работы с временными файлами, решает проблемы с блокировками при активном создании времянок множеством сессий и неполадками с TempDB, так как временные файлы ASA действительны только на время работы сервера и он к ним никак не привязывается. Интересно было бы послушать, как это организованно у Оракла и DB2.
24 дек 04, 11:39    [1207028]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
tygra
автор
действительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно.

А теперь по-русски объясните, что вы там делаете, что компилите, как стараетесь....
При таком подходе естественно все будет геморройно.

-- Tygra's --

Это судя по всему про Sybase ASE - там очень вумный компилятор не скомпилирует ХП, если в ней есть ссылки на несуществующие обьекты. Отсюда и такой большой бубен :)
24 дек 04, 11:41    [1207032]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
2 ASCRUSS
NOT LOGGED INITIALLY в DB2
24 дек 04, 11:41    [1207034]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
gardenman
2 ASCRUSS
NOT LOGGED INITIALLY в DB2

В общем судя по всему я так понимаю при желании мне перейти на IBM DB2 будет не очень долго :)
24 дек 04, 11:43    [1207042]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6 7 8   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить