Гость
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Oracle vs MSSQL. Битва интеллекта. / 20 сообщений из 20, страница 1 из 1
03.12.2015, 16:26
    #39119645
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
Oracle
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct x
  from (select column_value x
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
order by length(x);

select x
  from (select column_value x
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
group by x
order by length(x);

Код: plaintext
1.
2.
OK
OK

MSSQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(x)
go
select x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(x)

Код: plaintext
1.
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
OK
Ну и почему MSSQL не может догадаться что можно сортировать по детерминированной функции над столбцом?

Идем далее.
В Оракле 1-й и 3-й случаи отрабатывают потому что он догадывается что там константа.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select distinct x
  from (select column_value x, 1 y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
order by length(y);

select distinct x
  from (select column_value x, row_number() over (order by column_value) y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
order by length(y);

select x
  from (select column_value x, 1 y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
group by x
order by length(y);

select x
  from (select column_value x, row_number() over (order by column_value) y
          from table(sys.odcivarchar2list('hello','mister','smith','x'))) t
group by x
order by length(y);


Код: plaintext
1.
2.
3.
OK
ORA-01791: not a SELECTed expression
OK
ORA-00979: not a GROUP BY expression

В MSSQL не отрабатывает ничего (зато единообразно :))
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select distinct x
  from (select x, 1 y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(y)
go
select distinct x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(y)
go
select x
  from (select x, 1 y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(y)
go
select x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(y)

Код: plaintext
1.
2.
3.
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Column "t.y" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
Column "t.y" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

Ясное дело, без сортировки все варианты работают в обоих СУБД.
Ну и какая более интеллектуальная, huh?
...
Рейтинг: 0 / 0
03.12.2015, 18:43
    #39119824
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshop,

Dual все эти примеры перекрывает)
...
Рейтинг: 0 / 0
03.12.2015, 18:55
    #39119832
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
SergSuperDual все эти примеры перекрываетЧто?
...
Рейтинг: 0 / 0
03.12.2015, 19:02
    #39119835
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshopSergSuperDual все эти примеры перекрываетЧто?
это кусок Вашего кода, на Оракле попробуйте выполнить
Код: sql
1.
select 'hello' x union all select 'mister' union all select 'smith' union all select 'x'


или вот Вы пишите
select column_value x
from table (sys.odcivarchar2list('hello','mister','smith','x'))) t
зачем это table? что ж этот интеллектуальный Оракл не может догадаться что там табличные данные
...
Рейтинг: 0 / 0
03.12.2015, 19:13
    #39119844
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
SergSuperОракле попробуйте выполнитьТе, кому режут глаза подобные отличия, могут создать таблицу и любоваться практически полным совпадением текстов запросов.
Может тогда лучше удасться рассмотреть на чем делался акцент в стартовом посте.
SergSuperчто ж этот интеллектуальный Оракл не может догадаться что там табличные данныеАга, а еще интеллектуальный Оракл не позволяет создавать процедуры/функции без объявления типа результата.
Вообще беда.
...
Рейтинг: 0 / 0
03.12.2015, 23:20
    #39119992
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshop,


Код: sql
1.
2.
3.
4.
select distinct x
  from (select x
          from (select 'hello' x union all select 'hello' union all select 'smith' union all select 'x') t) t
--order by x


Полагаю, что это из-за того, что сам по себе DISTINCT в MS SQL фактически реализован оператором сортировки с удалением дубликатов:
...
Рейтинг: 0 / 0
03.12.2015, 23:22
    #39119994
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshop,

Сделать так:
Код: sql
1.
2.
3.
4.
select x
  from (select x
          from (select 'hello' x union all select 'hello' union all select 'smith' union all select 'x') t) t
order by LEN(x)


, то как бы очевидно, что сначала будет Compute Scalar и только потом SORT:
...
Рейтинг: 0 / 0
03.12.2015, 23:25
    #39119998
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshop,

А
Код: sql
1.
2.
3.
4.
5.
select x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(y)



замените на:
Код: sql
1.
2.
3.
4.
5.
select x
  from (select x, row_number() over (order by x) y
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by MAX(len(y))
...
Рейтинг: 0 / 0
03.12.2015, 23:31
    #39120003
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshop,

Так же полагаю, что это вариант:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  x
FROM
(
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t) t1
order by len(x)


сработает на обеих СУБД.
...
Рейтинг: 0 / 0
04.12.2015, 09:57
    #39120156
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshop,

для сравнения вне конкруса. Firebird 3.0

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select distinct x
  from (select x, 1 y
          from t) t
order by char_length(y);

with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select distinct x
  from (select x, row_number() over (order by x) y
          from t) t
order by char_length(y);

with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select x
  from (select x, 1 y
          from t) t
group by x
order by char_length(y);

with t(x) as (
   select 'hello' from rdb$database
   union all
   select 'mister' from rdb$database
   union all
   select 'smith' from rdb$database
   union all
   select 'x' from rdb$database
)
select x
  from (select x, row_number() over (order by x) y
          from t) t
group by x
order by char_length(y);



OK
OK
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).
...
Рейтинг: 0 / 0
05.12.2015, 17:26
    #39121394
Агенор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshopИдем далее.
В Оракле 1-й и 3-й случаи отрабатывают потому что он догадывается что там константа.


Это не достоинство оракла, а его недостаток. Вместо того, чтобы упрощать код и делать поведение системы предсказуемым, оракловские гавнокодеры реализовали кучу частных случаев и превратили движок исполнения запросов в подобие помойки, а именно свалку огромного количества костылей и заплаток, оставшихся от крупных клиентов.
...
Рейтинг: 0 / 0
07.12.2015, 13:43
    #39122314
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
pkarklinПолагаю, что это из-за того, что сам по себе DISTINCT в MS SQL фактически реализован оператором сортировки с удалением дубликатовНесколько странно полагать обработку синтаксиса (парсинг) основываясь на плане.
В Оракле тоже раньше distinct работал как SORT ORDER BY, потом стало возможно задействовать HASH GROUP BY.
Регулируется хинтом (no_)use_hash_aggregation.
pkarklinто как бы очевидно, что сначала будет Compute Scalar и только потом SORTПри отсутствующем distinct (или group by) не совсем понятно какое это имеет отношение к стартовому посту.
pkarklinзамените наЭто понятно. Акцент был сделан на ранице в поведении.
Впрочем особой необходимости для спец обработки вырожденных случаев как делает Оракле с константой я не вижу.

Ну и изначально в MSSQL выглядит несколько нелогично, что сортировка по len(x) в случае группировки допускается, а в случае distinct - нет.
Ясное дело, можно в случае с distinct добавить len(x) в select list и просто не отображать на клиенте, но сомнительна необходимость подобного в случае детерминированной функции.
...
Рейтинг: 0 / 0
07.12.2015, 13:58
    #39122333
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
Симонов Денисдля сравнения вне конкруса. Firebird 3.0Наиболее интересно отрабатывают ли эквивалент этого
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(x)
go
select x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
group by x
order by len(x)

Спасибо.
...
Рейтинг: 0 / 0
08.12.2015, 15:30
    #39123337
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshopСимонов Денисдля сравнения вне конкруса. Firebird 3.0Наиболее интересно отрабатывают лиНа ФБ эти два запроса выдают правильный вариант, начиная с версии 2.5.3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
C:\MIX\firebird\QA\fbt-repo\tmp>C:\MIX\firebird\oldfb253\bin\isql /3253:e25 -i da

X
======
x
hello
smith
mister


X
======
x
hello
smith
mister

ISQL Version: WI-V2.5.3.26780 Firebird 2.5
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.5.3.26780 Firebird 2.5"
Firebird/x86/Windows NT (remote server), version "WI-V2.5.3.26780 Firebird 2.5/tcp (csprog)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.3.26780 Firebird 2.5/tcp (csprog)/P12"
on disk structure version 11.2
До 2.5.2 включительно 'mister' вылезал раньше 'smith', т.е. они выдавались в перепутанном порядке:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
X
======
x
hello
mister
smith


X
======
x
hello
mister
smith
...
Рейтинг: 0 / 0
09.12.2015, 12:53
    #39124035
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
Агенорdbms_photoshopИдем далее.
В Оракле 1-й и 3-й случаи отрабатывают потому что он догадывается что там константа.


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

Пожалуй соглашусь.

С выходом 12 версии сложилось впечетление , что на поддержку
всех фич заплаток и часных случаев оракла не хватает рук.

Там явно у менеджмента проблемы с осознанием теории сложности,
связать тренд зависимости трудозатрат на поддержку фич и частных случаев
с прогрессией 2^Х они кажется ИМХО не осилили.
...
Рейтинг: 0 / 0
09.12.2015, 14:49
    #39124177
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
ДохтаР,

Так это - не малая доля их доходов завязана именно на платной поддержке. Поэтому они спокойно раздают базовую версию базы с сайта.
При таком подходе сложный черный ящик предпочтительней простого инструмента.
...
Рейтинг: 0 / 0
09.12.2015, 15:56
    #39124257
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
Сергей АрсеньевДохтаР,

Так это - не малая доля их доходов завязана именно на платной поддержке. Поэтому они спокойно раздают базовую версию базы с сайта.
При таком подходе сложный черный ящик предпочтительней простого инструмента.

Для того что бы обеспечить им доходы , нужно заработать денег,
сейчас наступает такое время, что шальные деньги как то не прут.

На росте мировой экономике это хорошая стратегия ,
а на стагнации клиенты найдут замену даже незаменимым дорогим фичам.

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

И вобще саппорт , это страховка для эффективного менеджера
среднего звена, что бы когда что то перестало работать , можно было
эфективно перевести стрелки на индусов.
...
Рейтинг: 0 / 0
09.12.2015, 16:05
    #39124273
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
ДохтаР,

Не мне учить Ларри деньги зарабатывать. :)
Так что их стратегия - их дело.

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

А они требуют большого комбайна.
...
Рейтинг: 0 / 0
09.12.2015, 17:25
    #39124344
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
Сергей АрсеньевДохтаР,

Не мне учить Ларри деньги зарабатывать. :)
Так что их стратегия - их дело.

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

А они требуют большого комбайна.

С точки зрения менеджмента спорный вопрос,
дорогой сотрудник в националной валюте , или дорогой саппорт в пересчете на доллары.

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

Своими можно договориться на компенсацию ипотеки в нац валюте,
талонами на бензин, размещением премии на депозит,
или еще как то поиграать в пянташки с дырявой ликвидностью,
а индусам вынь да полож, в долларах, в срок по договору,
а доходы то зарабатываются в национальной валюте.
...
Рейтинг: 0 / 0
09.12.2015, 23:41
    #39124510
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle vs MSSQL. Битва интеллекта.
dbms_photoshop,

авторНесколько странно полагать обработку синтаксиса (парсинг) основываясь на плане.

Так парсинг такой запрос проходит успешно. Значит дело не в парсинге.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SET PARSEONLY ON
GO
select distinct x
  from (select x
          from (select 'hello' x union all select 'mister' union all select 'smith' union all select 'x') t) t
order by len(x)
GO
SET PARSEONLY OFF



Код: plaintext
Command(s) completed successfully.

авторПри отсутствующем distinct (или group by) не совсем понятно какое это имеет отношение к стартовому посту.
Порядок выполнения операторов в плане. Т.е. сначала надо посчитать, а потом сортировать, но из подсчитанного кое-что могло быть удалено при DISTINCT SORT. Т.е. получается, для того, чтобы выполнить запрос оптимизатор должен поменять порядок операторов в плане - сделать не то, что просили. Возможно, это какой-то "рудимент" оптимизатора. Заведение по этому поводу "тикета" вижу бесперспективным.
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Oracle vs MSSQL. Битва интеллекта. / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]