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

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
2 ASCRUS
Понятно.

2 gardenman
Но тогда на MS SQL не надо бочку катить, коли сведений нет. Он далеко уже от того Sybase ушел, на котором был сделан

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

Откуда: 127.0.0.1
Сообщений: 67463
Блог
tygra
Тогда назовите отличия от Оракла - практически один в один получается. Только называется по-разному.

Отличия в следующем. Во-первых, nested table - это тип данных, регистрируемый на общих основаниях; это не "вложенный анонимный класс". Во-вторых, объекты типа nested table передаются как параметры. То есть не создается ситуация "таблица доступна в процедуре A, если она вызвана из процедуры B (где эта таблица создана), недоступна при вызове из процедуры C (где эта таблица не создана) и непонятно как доступна при вызове из процедуры D (где создается совершенно другая таблица, но с тем же именем, после чего вызывается A)". Ну и наконец, таки именно что возможность работать и так и этак - весьма удобная и вряд ли возможная для временных таблиц.
24 дек 04, 13:04    [1207469]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

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

Я увидел проблему в решении, о котором мне рассказали, и спросил, как она решается. Это решение я могу (со своей колокольни, естественно), оценить, в том числе как "не назову хорошим". В то же время я не вижу возможности получить лучший результат в той же модели.

SergSuper
Можно чуть попобробней что такое nested table и как с ними можно работать? Хотелось бы примерчик какой


Именно как тривиальный пример - например, здесь: https://www.sql.ru/forum/actualthread.aspx?bid=20&tid=146650&pg=2#1194010. Ну а описание и примеры - например, здесь.
24 дек 04, 13:13    [1207518]     Ответить | Цитировать Сообщить модератору
 Re: О временных таблицах замолвите слово...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67463
Блог
ASCRUS
Интересно было бы послушать, как это организованно у Оракла и DB2.

У Oracle дело обстоит следующим образом. Коллекции (в частности, nested tables) - это объекты в памяти сервера, транзакционно-независимые. Как они свопятся - не разбирался, просто потому что никогда не требовалось загонять в них серьезные объемы данных. Global Temporary Tables реализованы так же, как и обычные таблицы, но с парой исключений:

  • Если для обычной таблицы можно указать tablespace, в котором она размещается, то временные таблицы размещаются во временном tablespace, назначенном соответствующему пользователю.

  • При работе с временными таблицами не генерируется ненужных временных данных, а потому операции с GTT заметно эффективнее использования постоянной таблицы в тех же целях.
  • 24 дек 04, 13:58    [1207729]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    Vadim_Maximov
    Member

    Откуда: Москва
    Сообщений: 3571
    softwarer
    ASCRUS
    Интересно было бы послушать, как это организованно у Оракла и DB2.

  • При работе с временными таблицами не генерируется ненужных временных данных, а потому операции с GTT заметно эффективнее использования постоянной таблицы в тех же целях.

  • Саша, не возражаешь, если я немного уточню/добавлю: генерируется меньше данных redo (начиная с 9.2.0.5).
    Подробности здесь, например...
    24 дек 04, 14:09    [1207774]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Vadim_Maximov
    Саша, не возражаешь, если я немного уточню/добавлю: генерируется меньше данных redo (начиная с 9.2.0.5).

    Нисколько не возражаю - я просто стараюсь отвечать, используя минимум незнакомых слов :) Что касается версии - я склонен верить Кайту, что в восьмерке то же самое. А поскольку с девяткой начал работать с 9.2.0.4 - на этот баг, видимо, не напарывался :)
    24 дек 04, 14:16    [1207817]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    Константин Лисянский
    Member

    Откуда: Москва
    Сообщений: 902
    В СУБД Teradata поддерживаются и локальные и глобальные временные таблицы.
    Локальные таблицы являются локальными внутри сессии, информация о них не прописывается в Data Dictionary. Место для них выделяется из временного пространства (SPOOL SPACE) пользователя, то есть из того, пространства, которое используется для хранения промежуточных итогов запросов.
    Синтаксис CREATE VOLATILE TABLE ...
    Соответственно, есть опция ON COMMIT PRESERVE/DELETE ROWS. Эти операции с такими таблицами можно логировать, а можно и нет. Они не выживают после рестарта системы.
    Ограничения - отсутствие постоянных журналов, механизмов ссылочной целостности, констрейнтов, сжатия столбцов, заголовков столбцов и именованных индексов.

    Определение глобальных временных таблиц хранится в Data Dictionary, они материализуются при первой операции с ними (как правило, это INSERT SELECT). Они также локальны к сессии. Место под них выделяется на основе установок TEMPORARY SPACE пользователя, создающего (материализующего) эти таблицы.
    Синтаксис CREATE GLOBAL TEMPORARY TABLE ...
    Также имеются опции ON COMMIT PRESERVE/DELETE ROWS и журналирования.

    Фактически, локальные от глобальных отличаются тем, что информация о последних хранится в каталоге, и то, что они могут пережить рестарт системы.

    Для чего нужны? Всё просто. Возьмём, например, такой инструмент, как Microstrategy. Это такая тулза, которая путём мышкования позволяет генерировать довльно сложный многопроходный SQL. При этом есть возможность использовать Derived Table или временные таблицы. Практика показывает, что некоторые отчёты выполняются быстрее, если используются Derived Table, а некоторые - если используются Temporary Table.

    Ну, и наконец, их счастье было бы неполным, если бы я здесь не привёл тот самый SQL.
    Итак:

    create volatile table ZZMD00, no fallback, no before journal, no after journal(
    	WeekID	SMALLINT, 
    	LocID	INTEGER, 
    	WJXBFS1	FLOAT, 
    	WJXBFS2	FLOAT)
    primary index (WeekID, LocID) on commit preserve rows
    
    ;insert into ZZMD00 
    select	a15.WeekID  WeekID,
    	a11.LocID  LocID,
    	CAST (sum(a11.ItemRev) AS FLOAT)  WJXBFS1,
    	CAST (sum(a11.ItemRev) AS FLOAT)  WJXBFS2
    from	SALES_HISTORY	a11
    	join	ITEM	a12
    	  on 	(a11.ItemID = a12.ItemID)
    	join	SUBCLASS_V	a13
    	  on 	(a12.SubClassID = a13.SubClassID)
    	join	CLASS_V	a14
    	  on 	(a13.ClassID = a14.ClassID)
    	join	THE_DAY_V	a15
    	  on 	(a11.DayDT = a15.DayDT)
    	join	LOCATION	a16
    	  on 	(a11.LocID = a16.LocID)
    	join	DISTRICT_V	a17
    	  on 	(a16.DistID = a17.DistID)
    where	(a17.RegID = 133
     and a14.DeptID = 12
     and a15.WeekID in (26, 78))
    group by	a15.WeekID,
    	a11.LocID
    
    create volatile table ZZMD01, no fallback, no before journal, no after journal(
    	WeekID	SMALLINT, 
    	LocID	INTEGER, 
    	WJXBFS1	FLOAT)
    primary index (WeekID, LocID) on commit preserve rows
    
    ;insert into ZZMD01 
    select	a16.WeekID  WeekID,
    	a11.LocID  LocID,
    	sum(a11.ItemRev)  WJXBFS1
    from	SALES_HISTORY	a11
    	join	RELATE_LAST_V	a12
    	  on 	(a11.DayDT = a12.LastYearDT)
    	join	ITEM	a13
    	  on 	(a11.ItemID = a13.ItemID)
    	join	SUBCLASS_V	a14
    	  on 	(a13.SubClassID = a14.SubClassID)
    	join	CLASS_V	a15
    	  on 	(a14.ClassID = a15.ClassID)
    	join	THE_DAY_V	a16
    	  on 	(a11.DayDT = a16.DayDT and 
    	a12.DayDT = a16.DayDT)
    	join	LOCATION	a17
    	  on 	(a11.LocID = a17.LocID)
    	join	DISTRICT_V	a18
    	  on 	(a17.DistID = a18.DistID)
    where	(a18.RegID = 133
     and a15.DeptID = 12
     and a16.WeekID in (26, 78))
    group by	a16.WeekID,
    	a11.LocID
    
    select	distinct coalesce(pa1.WeekID, pa2.WeekID)  WeekID,
    	a12.WeekDesc  WeekDesc,
    	coalesce(pa1.LocID, pa2.LocID)  LocID,
    	a11.LocDesc  LocDesc,
    	pa1.WJXBFS1  WJXBFS1,
    	ZEROIFNULL(((ZEROIFNULL(pa1.WJXBFS2) - ZEROIFNULL(pa2.WJXBFS1)) / NULLIFZERO(pa2.WJXBFS1)))  WJXBFS2
    from	ZZMD00	pa1
    	full outer join	ZZMD01	pa2
    	  on 	(pa1.LocID = pa2.LocID and 
    	pa1.WeekID = pa2.WeekID)
    	join	LOCATION	a11
    	  on 	(coalesce(pa1.LocID, pa2.LocID) = a11.LocID)
    	join	THE_WEEK_V	a12
    	  on 	(coalesce(pa1.WeekID, pa2.WeekID) = a12.WeekID)
    
    
    drop table ZZMD00
    
    drop table ZZMD01


    С уважением,
    Константин Лисянский
    http://lissianski.narod.ru
    24 дек 04, 15:19    [1208201]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    Nikolay Kulikov
    Member

    Откуда: Москва
    Сообщений: 607
    DB2 временная таблица лежит в буфферном пуле. Если в нем нет места свопится в temporary tablespace. Temporary tablespace это или
    набор файлов внутри которых размазывается эта временная таблица или директория тогда каждая таблица это отдельный файл.
    24 дек 04, 16:31    [1208500]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    MasterZiv
    Member

    Откуда: Питер
    Сообщений: 34709
    dimitr

    Один нюанс - MSSQL (и полагаю, что Sybase ASE также) разделяет данные GTT между сессиями. Никто больше этого не делает.

    Не разделяют они данные, ни тот, ни другой. В них видимость временных таблиц - сессия, поэтому данные разные сессии никак не могут разделать.
    Но у MSSQL есть еще таблицы с ## впереди - таблица видна всем сессиям, как и данные в ней (тоже всем сессиям).
    24 дек 04, 18:09    [1208901]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    gardenman
    Member

    Откуда: С-Петербург
    Сообщений: 2347
    в Sybase ASE можно создать табличку tempdb..<TABLENAME> которая также как и ##TABLE будет доступна всем, но почистится после перезагрузки базы...
    24 дек 04, 18:13    [1208921]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    MasterZiv
    Member

    Откуда: Питер
    Сообщений: 34709
    Если оптимизатор в КОНКРЕТНОМ случае не справляется, это задача для тюнинга :)

    Существуют еще и АБСОЛЮТНО НЕОПТИМИЗИРУЕМЫЕ (сервером) ЗАПРОСЫ
    :-(
    24 дек 04, 18:14    [1208925]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    Gluk (Kazan)
    Member

    Откуда:
    Сообщений: 9365
    Не оптимизируемых (на уровне приложения) запросов НЕ СУЩЕСТВУЕТ
    24 дек 04, 18:36    [1208991]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    dimitr
    Member

    Откуда: PNZ
    Сообщений: 7000
    MasterZiv
    dimitr

    Один нюанс - MSSQL (и полагаю, что Sybase ASE также) разделяет данные GTT между сессиями. Никто больше этого не делает.

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


    Епрст. А я про что? Насколько я трезв, в MSSQL как раз оные ##-таблицы и есть ближайший аналог стандартных GTT. А #-таблицы - аналог LTT. Неужто я не прав?
    24 дек 04, 21:37    [1209210]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    вобщем за исключением некоторых нюансов - всё едино, только название и синтаксис разный
    27 дек 04, 11:23    [1210998]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    gardenman
    Member

    Откуда: С-Петербург
    Сообщений: 2347
    SergSuper
    вобщем за исключением некоторых нюансов - всё едино, только название и синтаксис разный

    они тока кажутся похожими. Но на самом деле работать с ними приходится по разному. В MSSQL и Sybase ASE #-таблицы нужны шоб обойти ублюдочность ихнего SQL - диалекта. а GTT - это действительно временные данные на уровне сессии.

    сессия 1:
    create table ##TT (id int)
    The command(s) completed successfully.

    сессия 2:
    Server: Msg 2714, Level 16, State 6, Line 1
    There is already an object named '##TT' in the database.
    27 дек 04, 11:44    [1211112]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    tygra
    Member

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

    А можно сразу комментарии. По ублюдочности. А то на предыдущий вопрос не ответили, может хоть тут. Может чего у вас с TSQL не так?

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

    Откуда: PNZ
    Сообщений: 7000
    SergSuper
    вобщем за исключением некоторых нюансов - всё едино, только название и синтаксис разный


    Один из этих нюансов я упоминал в первом посте этого топика. Данные #-таблиц разделяются между сеансами. Но практическую пользу от этого я вижу смутно.
    27 дек 04, 14:01    [1211800]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    dimitr
    Member

    Откуда: PNZ
    Сообщений: 7000
    tygra
    автор
    В MSSQL и Sybase ASE #-таблицы нужны шоб обойти ублюдочность ихнего SQL - диалекта

    А можно сразу комментарии. По ублюдочности. А то на предыдущий вопрос не ответили, может хоть тут. Может чего у вас с TSQL не так?


    Мне тоже интересно. Почти все высказавшиеся называли базовые причины использования временных таблиц, которые применимы ко всем серверам, пожалуй. Но тем не менее MSSQL-щики юзают их на порядок-другой чаще остальных. Это хорошо видно по мигрантам, задающим вопросы в топиках про Oracle/InterBase/etc. Так в чем же причина, собственно? В производительности ядра MSSQL? В недостаточности языковых воможностей для сложных запросов? В менталитете разработчиков?
    27 дек 04, 14:07    [1211834]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    ASCRUS
    Member

    Откуда: МО Электросталь
    Сообщений: 5994
    dimitr
    Мне тоже интересно. Почти все высказавшиеся называли базовые причины использования временных таблиц, которые применимы ко всем серверам, пожалуй. Но тем не менее MSSQL-щики юзают их на порядок-другой чаще остальных. Это хорошо видно по мигрантам, задающим вопросы в топиках про Oracle/InterBase/etc. Так в чем же причина, собственно? В производительности ядра MSSQL? В недостаточности языковых воможностей для сложных запросов? В менталитете разработчиков?

    Лично мое мнение - что в недостатке возможностей для сложных запросов. Производительность ядра у MSSQL очень даже на уровне и он имеет довольно мощный и современный оптимизатор даже на текущий момент, несмотря на то, что был сделан в 2000 году. Ну и еще плюс не стоит забывать про архитектуру блокировочника и исторически сложившуюся архитектуру в частности самого MSSQL. Здесь тоже времянки иногда помогают выйти из положения. Ну а менталитет разработчиков - хорошие пользуются времянками, когда это получается заведомо выгоднее и эффективнее, плохие - потому как просто не знают, не думают как можно по другому (это тоже самое, как и использование курсоров).
    27 дек 04, 14:14    [1211862]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    gardenman
    Member

    Откуда: С-Петербург
    Сообщений: 2347
    когда в MSSQL ьщжно будет писатьвот так как тут в конце страницы тогда можно будет стравнивать MSSQL c Oracle или DB2, а иначе - веь этот треп - просто проявление комплекса неполноценности...

    Можно даже подвести под МSSQL некую логичскую черту:
    1) CTE - нет
    2) Рекурсивных запросов -нет
    3) триггеров before/for each row нет
    4) SQUENCE - нет
    5) timestamp - вообще непонятно что
    6) тип данных DATE - отсутствует как класс (и TIME тоже)
    7) структурные типы - отсутствуют...
    8) а где многоплатформенность?
    9) а как на счет масштабируемости и кластеров?

    а сравним PL/SQL с T-SQL?
    а попробуйте написать на ESQL/C++ ХП, так как это можно делать в DB2?

    И вы хотите сравнивать это все с Оracle или DB2 ?...
    27 дек 04, 14:31    [1211953]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    gardenman
    Member

    Откуда: С-Петербург
    Сообщений: 2347
    ах да...)) GTT - от микрософт - это не GTT ...))
    27 дек 04, 14:32    [1211958]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    Alex.Czech
    Guest
    В Юконе как раз можно будет так писать, как в конце той страницы. Получается, что уже можно сравнивать - бета есть :)
    27 дек 04, 14:42    [1212005]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    gardenman, позиция "против" - она, вобщем-то, выражаясь вашим языком, ублюдочная

    под MS SQL работает довольно большой процент серверов, но вы не пытаетесь понять почему, вы просто пытаетесь доказать что M$ хуже во всём. Зачем Вам это? Инфантилизм какой-то

    а 5-й пункт - просто убивает наповал. Действительно зачем нужен такой сервер если gardenman не понимает что такое timestamp?
    27 дек 04, 14:49    [1212054]     Ответить | Цитировать Сообщить модератору
     Re: О временных таблицах замолвите слово...  [new]
    tygra
    Member

    Откуда: Тверь (Иркутск, Край)
    Сообщений: 9997
    Там очень много чего в конце страницы. Тем более чего там относится к временным таблицам я так и не понял.....

    автор
    2) Рекурсивных запросов -нет

    Уже показали, что и без них нет проблем
    автор
    3) триггеров before/for each row нет

    Без них неплохо.
    автор
    4) SQUENCE - нет

    А зачем?
    автор
    5) timestamp - вообще непонятно что

    Ну кому что и как :)
    автор
    6) тип данных DATE - отсутствует как класс (и TIME тоже)

    Ну есть datetime, ничего,хватает
    автор
    7) структурные типы - отсутствуют...

    А зачем?
    автор
    8) а где многоплатформенность?

    А не нужна
    автор
    9) а как на счет масштабируемости и кластеров?

    Вот это единственное, чего жаль что нет

    автор
    а сравним PL/SQL с T-SQL?
    а попробуйте написать на ESQL/C++ ХП, так как это можно делать в DB2?

    Ничего, работаем

    автор
    И вы хотите сравнивать это все с Оracle или DB2 ?...

    Мы не хотим, мы уже. И работаем однако. И хорошо работаем. И не выдумываем различных причин. И все неплохо получается. И насильно никому не навязываем - аллергию на MS пока не лечат

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

    Откуда: С-Петербург
    Сообщений: 2347
    Снимаю шляпу перед tygra...
    более убедительно еще никто не показывал мне как я неправ...
    Публично приношу извинения всем тем, кто любит MS SQL....
    27 дек 04, 14:53    [1212071]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7 8   вперед  Ctrl      все
    Все форумы / Сравнение СУБД Ответить