Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 11 12 13 14 15 [16] 17 18 19 20 .. 31   вперед  Ctrl
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Gluk (Kazan)
Если в запросе используются ТОЛЬКО поля индекса, Oracle может решить полностью сканировать индекс вместо таблицы, что значительно быстрее. Сканироваться индекс будет естественно не по порядку, а в порядке следования блоков в сегменте. В Yukon, насколько я понял введена аналогичная фича, позволяющая ВКЛЮЧАТЬ в индекс столбцы не задействованные в индексе. Зачем правда я так и не понял, что мешает просто включить их в индекс ???

Насколько я понимаю, не совсем так. Брать поля из индекса умеет и MSSQL 2000. Мало того, там это один из основных приемов оптимизации, благодаря чему в индексы включается прорва дополнительных полей (не нужных собственно индексу). В Yukon, как мне говорили, будет включена фича, позволяющая не включать эти дополнительные поля в branch-узлы b-индекса, то есть соответственно более эффективно использовать узловые блоки; в leaf-узлах эти поля есть и оттуда будут браться.
12 янв 05, 11:12    [1237867]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
>> Пример, приведенный в Faq, вроде понятный

В Faq, вообще-то, описывается превращение столбца в строку, а не строки в столбец.
12 янв 05, 11:16    [1237897]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Bug# 000001
Platform: Oracle:
Subsystem: FAQ
Subject: Invalid title in Oracle FAQ: "Транспонирование строк в столбцы"
A title "Транспонирование строк в столбцы" must be renamed to "Транспонирование столбцов в строки"
12 янв 05, 11:22    [1237924]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7079
www.fun4me.narod.ru
Bug# 000001
Platform: Oracle:
Subsystem: FAQ
Subject: Invalid title in Oracle FAQ: "Транспонирование строк в столбцы"
A title "Транспонирование строк в столбцы" must be renamed to "Транспонирование столбцов в строки"

Может мы говорим на разных языках? Смотрю на статью эту... Строки в столбцы! Почему Вы считаете наоборот?
12 янв 05, 11:27    [1237951]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Статья ::= https://www.sql.ru/forum/actualthread.aspx?tid=145574&pg=16

Статья

Задаём форматирование результатов для sqlplus, чтобы данные одной записи умещались в одну строку


Было: (Продукт, Номер Месяца, Сумма)
Стало: (Продукт, Сумма_Месяц1, Сумма_Месяц2, ..., Сумма_Месяц12)

То что было - это стобец, потому что он высокий и узкий, если его в Excel вывести. А то, что стало - это строка. Потому, что она низкая и широкая.
12 янв 05, 11:33    [1237988]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Пусть у нас есть только один продукт. До преобразования, описанного в статье, суммы по продукту были в одном столбце, а после преобразования оказались в одной строке.
12 янв 05, 11:43    [1238045]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Следовательно, исходный столбец (один) был преобразован в результирующую строку (одну).
12 янв 05, 11:46    [1238061]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7079
www.fun4me.narod.ru

Было: (Продукт, Номер Месяца, Сумма)
Стало: (Продукт, Сумма_Месяц1, Сумма_Месяц2, ..., Сумма_Месяц12)

То что было - это стобец, потому что он высокий и узкий, если его в Excel вывести. А то, что стало - это строка. Потому, что она низкая и широкая.

Было несколько строк:
Продукт, Номер Месяца1, Сумма1
Продукт, Номер Месяца2, Сумма2
Продукт, Номер Месяца3, Сумма3
Стала одна: Продукт, Сумма1, Сумма2, Сумма3
Т.е. три строчки превратились в одну, но добавилось 2 столбца.
Но вообще, как хотите так и называйте. Главное смысл Вы поняли правильно.
12 янв 05, 11:47    [1238069]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
curious.
Guest
Братья, либо я сегодня сильно торможу, либо транспонировать можно эээ... таблицу. При этом строки становятся столбцами и наоборот. Если у вас я не въехал какая разница, то это эээ... не транспонирование 8)
12 янв 05, 12:26    [1238305]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
alex-ls
И продолжаю держаться за эту позицию, пока меня не убедят в обратном. Приведенные примеры лично у меня не заработали... Хотя есть и MS SQL сервер: два проца 1.7 Гц и памяти 1 Гб, что конечно меньше, чем на Oracle, но сравнивать можно.
Может все же кто-нибудь даст рабочий код, который я мог бы потестировать?

Что именно, из приведенного мной примера, не заработало? Пример запроса, который я привел, работает примерно с равной скоростью с Оракловским connect by при глубине 1-2 уровня и обгоняет Оракл при большей глубине.
12 янв 05, 12:34    [1238349]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
StalkerS
Я рад, что вы с этим не спорите. Начался весь этот разговор с того, что alex-ls говорил, что разница есть, и очень даже приличная. Именно
в скорости обработки запроса, а не в человеко-часах ее разработки.

Хм. Не возьму на себя смелость отвечать за утверждения другого человека - сам я не использовал эту фичу на больших выборках, так что без личного мнения.

StalkerS
Таким образом, разговор сходит к затратам времени на реализацию, но не к самой работе базы.

Мой разговор. Вернее даже, моя попытка объяснить Вам, что оценка достаточно сложна - поскольку Вы пытаетесь решить каждый вопрос парой быстрых движений. Собственно, я рад, что Вы наконец-то увидели то, что я говорил Вам еще пару страниц назад :)

StalkerS
С чисто практической точки зрения тут можно спорить (хороший специалист все-равно решит, и вряд-ли затратит намного больше времени,

Хм. По этой же позиции можно решить, что хорошему специалисту не нужны стандартные библиотеки, стандартные SQL-сервера...

Опыт показал - человек, отстаивающий деревья в MSSQL, не может прямо сейчас выделить достаточное количество времени. Я ту же задачу решу за считанные секунды.

Безусловно, в рамках рабочего проекта на одну-единственную нужную фичу можно выделить и час, и день и неделю. В то же время, как Вы понимаете, если проект будет на 20% состоять из реализации таких фич - затраты на него будут уже существенно другими. Какова будет эта пропорция в конкретном случае и как она соотносится с другими затратами - надо смотреть по месту.

StalkerS
а неспециалист спросит на форуме, где получит ответ специалиста,

Это несерьезно.

StalkerS
Ведь мы не сравниваем эти фичи с нулем. Мы сравниваем их с другим набором фич.

Затрудняюсь ответить. На практике я не видел, чтобы сторонники MSSQL отвечали перечислением "своих" фич - видел именно "мы тоже можем руками это сделать".

StalkerS
Вот к примеру PIVOT, превращает строки таблицы в столбцы.(возможно в оракле так тоже можно, но вы, надеюсь, понимаете, что я имею ввиду).

Понимаю. С точки зрения Oracle, это функция (в варианте для выборки данных) не SQL - она встроена в библиотеку BI Beans (это оракловое API для реализации OLAP приложений). Лично я полагаю такой подход разумным; в пользу SQL-реализации я вижу единственный аргумент: это позволит строить кросс-отчеты в убогих генераторах, не поддерживающих такой возможности.

Более актуальна для SQL обратная операция, unpivot - она применяется, например, для загрузки данных из внешних файлов. Это делается примерно так:

INSERT ALL
      INTO sales (prod_id, cust_id, time_id, amount_sold)
      VALUES (product_id, customer_id, weekly_start_date, sales_sun)
      INTO sales (prod_id, cust_id, time_id, amount_sold)
      VALUES (product_id, customer_id, weekly_start_date+1, sales_mon)
      INTO sales (prod_id, cust_id, time_id, amount_sold)
      VALUES (product_id, customer_id, weekly_start_date+2, sales_tue)
      INTO sales (prod_id, cust_id, time_id, amount_sold)
      VALUES (product_id, customer_id, weekly_start_date+3, sales_wed)
      INTO sales (prod_id, cust_id, time_id, amount_sold)
      VALUES (product_id, customer_id, weekly_start_date+4, sales_thu)
      INTO sales (prod_id, cust_id, time_id, amount_sold)
      VALUES (product_id, customer_id, weekly_start_date+5, sales_fri)
      INTO sales (prod_id, cust_id, time_id, amount_sold)
      VALUES (product_id, customer_id, weekly_start_date+6, sales_sat)
SELECT product_id, customer_id, weekly_start_date, sales_sun,
      sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat
FROM sales_input_table;

StalkerS
Теперь это полностью автоматизировано, и надеюсь никто спорить не будет, что это лучше, т.к. вы не в состоянии думать лучше, чем встроенный алгоритм.

Вот с этим, полагаю, любой оракловый админ поспорит, причем с достаточно серьезными аргументами. Мало того, почти в любом деле - далеко не только в настройке серверов - оказывается, что лучшие результаты дает сочетание мозгов умелого специалиста с алгоритмами, которые избавляют его от рутины.

При отсутствии вменяемого специалиста алгоритм, безусловно, лучше отсутствия как специалиста, так и алгоритма. Сравнивать сервера в этом вопросе я не возьмусь.

StalkerS
Вот и думайте теперь, что лучше, работа с деревьями или PIVOT. Похоже на сравнение, что лучше - длинное или соленое.

Так было бы все-таки интересно увидеть фичи, которых в Oracle нет :) А то неинтересно сравнивать то что есть с тем что есть :)

StalkerS
java и .NET вещи немного разные.

Из последующего изложения я вижу единственную разницу: первую Вы не знаете, а второй - знаете.

StalkerS
Нельзя так говорить, что раз java непопулярна, так и .net не понадобится. Что-б пользоваться java, вам его знать надо.

Чтобы пользоваться .net, его знать не надо?

StalkerS
А в случае с .net, вы будете использовать один и тот-же язык для разработки клиентского приложения и самой базы.

А почему Вы считаете, что в случае java не то же самое?

StalkerS
Написали клиента на C#, и хранимую процедуру на C#. И никаких других языков привлекать больше не надо.

Написал клиента на java и хранимую процедуру на java.... Другой вопрос, что это предложение - из серии "освой за 21 день".

StalkerS
Вот если-бы я был разработчиком оракл, то тоже-бы не пользовался такой возможностью, потому-что не знаю java. И не стал-бы его учить, только для того, что-бы написать пару ХП.

Но стали бы учить .net для того же самого? Правда?

StalkerS
А если я уже знаю один из .net-языков для разработки клиентов, так почему-бы не написать на нем сложную ХП ?

Потому что она получится неэффективной.

Впрочем, первая реакция - что будет, если Вы знаете java не не знаете .net?

StalkerS
А вот как раз кроссплатформенность в случае с оракл, выезжает на первый план. Не понимаю, почему вы придаете такое малое значение этому факту, вы-же сами писали, что основная масса баз оракл находиться на юниксах.

И? Вы почему-то полагаете, что .NET мгновенно станет необходим. На сегодня у него нет явных преимуществ перед java; при этом стоит иметь в виду, что Oracle сделал на java ставку достаточно давно; таким образом можно предполагать, что в ближайшие годы в мелочах - сроки выхода новых реализаций итп - использовать ее под Oracle будет поудобнее. К тому моменту, когда и если .NET станет существенно круче - а я полагаю, что в перспективе Microsoft побьет Sun - .NET вряд ли останется одноплатформенным; слишком уж много людей так или иначе хотят этого.

StalkerS
softwarer

Я взял это из математики. Ни мне, ни кому-то другому не составит серьезного труда написать серию программ, корреляция между количеством
дыр в которых и некоторой метрикой защищенности окажется равной произвольному коэффициенту. Полагаю, Вы понимаете, что это означает.

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

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

StalkerS
Мне не хочется тут спорить, я согласен что количество дыр ничего не говорит, но и заявлять, что это истина последней инстанции я-бы не хотел.

Скажем так, под "не коррелирует" я имею в виду "коэффициент корреляции довольно мал". Утверждать его строгое равенство нулю я безусловно не собираюсь.

Полагаю, в такой формулировке мы пришли или придем к согласию.

StalkerS
Определение разницы на выходе при работе систем оракл и mssql в общем случае практически невозможно, а для какого-либо частного случая
требуется анализ, стоимость которого может превысить выгоды от его результата, причем качество этого анализа нельзя гарантировать.
Следовательно, при выборе системы для базы данных, нужно ориентироваться не на достоинства/недостатки этих систем, а на второстепенные
факторы. К примеру, если на фирме есть один спец по оракл, а другой по mssql, работу надо дать тому, кто меньше загружен или кто более
опытен.

Хм. Я бы сказал, что в случае достаточно серьезного проекта анализ все же стоит провести - а в остальном это практически то, что я утверждал с самого начала.

К примеру, в изделие может входить 50 одинаковых подшипников,
причем в совершенно разные сборки. Так этот запрос вернет 50 строк, содержищих эти пути. (кстати, ваша вcтроенная фича так умеет ?)

Хм. Почему нет? Вполне умеет.

Собственно, я могу назвать единственную задачу, в которой придется извращаться, чтобы решить ее с помощью connect by - развернуть в дерево граф, не являющийся деревом (например, порвать циклы).
12 янв 05, 13:09    [1238533]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7079
andsm

Что именно, из приведенного мной примера, не заработало? Пример запроса, который я привел, работает примерно с равной скоростью с Оракловским connect by при глубине 1-2 уровня и обгоняет Оракл при большей глубине.

Приведите пожалуйста еще раз скрипт. Плюс код создания кластерного индекса. Отвечу подробнее, может где сам ошибся.
И еще, не знал, что клиент Oracle 8 работает с сервером Oracle 9 медленнее, чем его родной. Моя ошибка, извиняюсь. На родном 5 мс.
Могу привести результаты...
Хотя в принципе мнение все же Вы мое изменили, MS SQL не так плохо работает с деревьями, как я думал раньше. Судил по плохим примерам. Но все же медленнее, чем Oracle.
Все написанное ИМХО.
12 янв 05, 14:13    [1238834]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
alex-ls
Приведите пожалуйста еще раз скрипт. Плюс код создания кластерного индекса.

Скрипт в приложенном файле
Индексы для Oracle создавайте какие хотите. Для SQL Server должны быть индексы по LeftPath и RightPath, и по ID.
alex-ls
MS SQL не так плохо работает с деревьями, как я думал раньше. Судил по плохим примерам. Но все же медленнее, чем Oracle.

Возвращаясь к приведенному примеру - на деревьях с малой глубиной метод работает примерно с той же скоростью что и в Oracle connect by, при большей глубине дерева - обгоняет. Чем больше глубина дерева, тем больше отстает Oracle от MSSQL.
12 янв 05, 15:41    [1239280]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Yo!
Guest
2andsm

там нет PATH и LEVEL, это проблема для Celko ?
12 янв 05, 15:54    [1239355]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7079
Вариант Степина Андрея:
declare @elem int, @level int
   select  @level=0 -- @elem - элемент, с которого начинаем поиск подузлов

   declare @wave table (parent int null, child int null, level int)

   SET STATISTICS TIME on
   insert into @wave
   select *, @level
   from tree
   where parent_ in (309158, 210758, 209117, 304391)
   while @@rowcount>0
   begin
      select @level=@level+1
      insert into @wave
      select t.parent_, coalesce(t.child_,w.parent), @level
      from @wave w
      join tree t on t.parent_=w.child
      where w.level=@level-1 and w.parent is not null
   end

   SET STATISTICS TIME off
   set nocount off
   select count(*) from @wave
   select * from @wave order by 1

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

(118 row(s) affected)


SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 1 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

(145 row(s) affected)


SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 4 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

(29 row(s) affected)


SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 3 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

(0 row(s) affected)


SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 1 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

(1 row(s) affected)


(292 row(s) affected)

Это минимальное время, которого мне удалось добиться. Т.е. 9-10 мс. Бывало и по 16 и по 80 мс, но это мы отбрасываем, в связи с тем, что сервер рабочий.
12 янв 05, 16:13    [1239444]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
2 Yo!
А что если немного видоизменить задачу?
Например, видоизменим ее так:
следом за каждой вершиной должны идти ее потомки. Если у потомка есть еще потомки, то должны идти потомки потомков и т.д. Получается что-то вроде левого обхода по графу.
Пример:
ID ParentID
1 NULL
2 1
3 1
4 2
5 3
6 2
7 3

Запрос для вершины 1 должен вернуть:
1
2
4
6
3
5
7

Как это сделать в моем подходе:
select sr.* from TestTable sr
 join TestTable srIn on srIn.ID=1
  and sr.LeftPath between srIn.LeftPath and srIn.RightPath
order by sr.LeftPath
Как такое же сделать в Oracle?
12 янв 05, 16:16    [1239460]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
andsm

Как такое же сделать в Oracle?

Хм. Это то, что Вы хотели?

Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 
Connected as test

SQL> create table tree (id integer, parent_id integer);

Table created

SQL> insert into tree 
  2  select 1, null from dual union
  3  select 2, 1 from dual union
  4  select 3, 1 from dual union
  5  select 4, 2 from dual union
  6  select 5, 3 from dual union
  7  select 6, 2 from dual union
  8  select 7, 3 from dual ;

7 rows inserted

SQL> commit ;

Commit complete

SQL> select lpad ( '', 2 * level ) || id
  2  from tree
  3  start with id = 1
  4  connect by prior id = parent_id ;

LPAD('',2*LEVEL)||ID
--------------------------------------------------------------------------------
1
2
4
6
3
5
7

7 rows selected

SQL> 
12 янв 05, 16:23    [1239494]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Прошу прощения - опечатался

SQL> select lpad ( ' ', 2 * level ) || id
  2  from tree
  3  start with id = 1
  4  connect by prior id = parent_id ;

LPAD('',2*LEVEL)||ID
--------------------------------------------------------------------------------
  1
    2
      4
      6
    3
      5
      7

7 rows selected
12 янв 05, 16:26    [1239515]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 7079
Вариант мой.

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Jan 12 16:21:27 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> set autotrace on
SQL> set timing on
SQL> select count(*)
  2  from elsi_omptest.tree
  3  connect by parent_ = prior child_
  4  start with parent_ in (309158, 210758, 209117, 304391);

  COUNT(*)
----------
       292

Elapsed: 00:00:00.03

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=11 Card=1 Bytes=8)
   1    0   SORT (AGGREGATE)
   2    1     CONNECT BY (WITH FILTERING)
   3    2       NESTED LOOPS
   4    3         INLIST ITERATOR
   5    4           INDEX (RANGE SCAN) OF 'IND_PARENT' (NON-UNIQUE) (C
          ost=2 Card=59 Bytes=236)

   6    3         TABLE ACCESS (BY USER ROWID) OF 'TREE'
   7    2       NESTED LOOPS
   8    7         BUFFER (SORT)
   9    8           CONNECT BY PUMP
  10    7         TABLE ACCESS (BY INDEX ROWID) OF 'TREE' (Cost=11 Car
          d=15 Bytes=120)

  11   10           INDEX (RANGE SCAN) OF 'IND_PARENT' (NON-UNIQUE) (C
          ost=1 Card=15)





Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        530  consistent gets
          0  physical reads
          0  redo size
        304  bytes sent via SQL*Net to client
        491  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          7  sorts (memory)
          0  sorts (disk)
          1  rows processed
Сам не ожидал 3 мс, до этого было 4-5 мс. Индекс обычный, не кластерный.
Завтра еще о нескольких вариантах напишу.
12 янв 05, 16:27    [1239524]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Yo!
Guest
2andsm

так как на счет PATH и LEVEL ? это проблема ?

>А что если немного видоизменить задачу?

так ? можно еще по level отсортировать.
SET autotrace off
SET pagesize 40

drop table my_emp;

create table my_emp 
(
 emp_id  varchar2(2),
 name    varchar2(15),
 mgr_id  varchar2(2)
);


insert into my_emp (emp_id,name,mgr_id) values ('1','KING',' ');
insert into my_emp (emp_id,name,mgr_id) values ('2','SMITH','1');
insert into my_emp (emp_id,name,mgr_id) values ('3','JONES','1');
insert into my_emp (emp_id,name,mgr_id) values ('4','BALL','1');
insert into my_emp (emp_id,name,mgr_id) values ('5','HOBBS','2');
insert into my_emp (emp_id,name,mgr_id) values ('6','BLACK','2');
insert into my_emp (emp_id,name,mgr_id) values ('7','WHITE','3');
insert into my_emp (emp_id,name,mgr_id) values ('8','MARSH','3');
insert into my_emp (emp_id,name,mgr_id) values ('9','CHANG','3');
insert into my_emp (emp_id,name,mgr_id) values ('10','STEWART','4');
insert into my_emp (emp_id,name,mgr_id) values ('11','DAILY','4');
insert into my_emp (emp_id,name,mgr_id) values ('12','GREEN','4');
insert into my_emp (emp_id,name,mgr_id) values ('13','BELL','10');
insert into my_emp (emp_id,name,mgr_id) values ('14','HARRIS','10');


commit;


select level, 
       substr(lpad(' ',level*2)||name,1,20) name
from my_emp
start with name = 'KING'
connect by prior emp_id = mgr_id;



     LEVEL NAME
---------- --------------------
         1   KING
         2     SMITH
         3       HOBBS   <- worker bee - do not want
         3       BLACK      "
         2     JONES
         3       WHITE      "
         3       MARSH      "
         3       CHANG      "
         2     BALL
         3       STEWART
         4         BELL     "
         4         HARRIS   "
         3       DAILY      "
         3       GREEN      "
 
http://216.239.59.104/search?q=cache:YiCRhdKCfXwJ:asktom.oracle.com/pls/ask/f%3Fp%3D4950:8:::::F4950_P8_DISPLAYID:6908513488625+SYS_CONNECT_BY_PATH+lpad+site:oracle.com&hl=en
12 янв 05, 16:30    [1239538]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Yo!
так как на счет PATH и LEVEL ? это проблема ?

Это не проблема. Но если использовать прямой подход, запросы будут медленнее чем в Оракле. Можно сделать быстрее, но это требует модификации метода.

По задачке - все же с Оракл я уже два года как не работал, начинаю забывать. Ничего, еще немного подумаю и придумаю такую задачу с деревьями какую на Оракле нормально не сделать.
12 янв 05, 16:36    [1239572]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
Yo!
Guest
Это не проблема. Но если использовать прямой подход, запросы будут медленнее чем в Оракле. Можно сделать быстрее, но это требует модификации метода.

так можно намекнуть в как будет модифицироватся метод ? это еще дополнительные поля + тригеры или что-то более приемлемое ?
12 янв 05, 16:38    [1239580]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
andsm
Ничего, еще немного подумаю и придумаю такую задачу с деревьями какую на Оракле нормально не сделать.

Давайте тогда уж и я подкину Вам задачку для решения не на Оракле :)

Выборка:

SQL> select * from tree2;

                                     ID                                  MGR_ID NAME
--------------------------------------- --------------------------------------- ----------
                                      1                                         CLARK
                                      2                                       1 SMITH
                                      3                                       2 DODSON
                                      4                                       2 McLAUREN
                                      5                                       2 ABBOTH
                                      6                                       1 JENSON
                                      7                                       1 STARK
                                      8                                       1 SMIRNOFF

8 rows selected

Задача: выдать дерево сотрудников (подчиненные под руководителем), подчиненных каждого руководителя отсортировать по алфавиту.
12 янв 05, 17:01    [1239684]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
softwarer
Давайте тогда уж и я подкину Вам задачку для решения не на Оракле :)

Гы - мы решение этой задачки даже в FAQ у себя выложили - ничего сложного :)
12 янв 05, 17:16    [1239754]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL > Oracle = True?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
ASCRUS
Гы - мы решение этой задачки даже в FAQ у себя выложили - ничего сложного :)

Хм. Во-первых, у меня есть впечатление, что это решение я сломаю :) И полагаю, понятно, что сделать его правильным в общем случае требует довольно больших усилий (и не уверен, что вообще возможно). Во-вторых, как и Oracle, вы пользуетесь специальной фичой (предназначенной именно для организации деревьев), но в Oracle решение этой задачи записывается куда короче.
12 янв 05, 17:33    [1239811]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 11 12 13 14 15 [16] 17 18 19 20 .. 31   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить