сгруппировать vs без повторяющихся #725120


#0 by qeos
что быстрее? как правильней?
#1 by vicof
для разных задач разные варианты
#2 by qeos
понял. нужен был пример. это я просто в попыхах тему создал. Вобщем допустим есть две таблицы: вот как правильней будет? ниже два варианта <CODE>ВЫБРАТЬ РАЗЛИЧНЫЕ * ИЗ таблица1 ОБЪЕДИНИТЬ ВСЕ ПОЛНОЕ СОЕДИНЕНИЕ таблица2 СГРУППИРОВАТЬ ПО поле1 </CODE>
#3 by qeos
мде.. где тут форматирование? какие теги-то?
#4 by Ненавижу 1С
тегов нет
#5 by Necessitudo
Если в голом варианте- то различные быстрее.
#6 by AlexTim03
НА уровне SQL нет разницы, оба ззпроса будут преобразованы к виду "group by"
#7 by Necessitudo
Не ври) DISTINCT
#8 by dk
оба варианта неверные )) достаточно просто -- Выбрать * ИЗ Таб1 ОБЪЕДИНИТЬ
#9 by alle68
Выбрать РАЗЛИЧНЫЕ * ИЗ Таб1
#10 by Necessitudo
Когда-то слышал, что использовать "Объединить" вместо "Объединить Все" зло злостное.
#11 by dk
а проверить?
#12 by alle68
Действительно.
#13 by dmpl
СГРУППИРОВАТЬ имеет смысл при использовании агрегатных функций. РАЗЛИЧНЫЕ - ручками писать быстрее.
#14 by МишельЛагранж
>>ГРУППИРОВАТЬ имеет смысл при использовании агрегатных функций - не "имеет смысл", а необходимо в этом случае. РАЗЛИЧНЫЕ и СГРУППИРОВАТЬ - совершенно разные команды 1С. Кто вам посоветовал их сравнить?
#15 by Гёдза
distinct неявно вызывает group by
#16 by Гёдза
вернее и то и другое делается через сортировку таблицы
#17 by Serginio1
Может и Хэш таблицу применять Используются разные алгоритмы sort unique/hash unique (distinct), sort group by/hash group by (group by). Реализация алгоритмов может варьироваться от версии к версии. { HASH |ORDER } GROUP Указывает, что агрегаты, описываемые в предложениях GROUP BY или DISTINCT запроса, должны использовать хэширование или упорядочивание.
#18 by МишельЛагранж
>>вернее и то и другое делается через сортировку таблицы - варианты сортировки в SQL никакого прямого отношения не имеют к самим командам 1С. Как и к их быстройдействию в запросах 1С. Как правильно написал Serginio1 - если и есть минимальные отличия в способах сортировки SQRT в SQL, то они влияния такого не оказывают, как последующая обработка в самом 1С.
#19 by H A D G E H O G s
Я правильно понимаю, что DISTINCT работает так: Hash group by - это: 1) Сортировка по агрегатным полям 2) Построение хеша по агрегатным полям (возможно одновременно с сортировкой) 3) Проход по таблице по алгоритму: Sort group by - это: 1) Сортировка по агрегатным полям 2) Проход по таблице по алгоритму: Если ПредыдущееПоле1<>ТекущееПоле1 ИЛИ... ПредыдущееПолеn<>ТекущееПолеn Тогда ПредыдущееПоле1=ТекущееПоле1;
#20 by Serginio1
Gjcnjzyyj bcgjkmpe.
#21 by H A D G E H O G s
Что это за куски кода?
#22 by H A D G E H O G s
Ты делал универсальную Группировку для любых аггрегируемых типов штоле?
#23 by H A D G E H O G s
Я понимаю, как группировать ТЗ программно, см. (19, вариант 2) я спрашиваю, так ли это делает SQL, ибо мне на ум приходит только такой алгоритм, но может кибернетики придумали что-то хитрее.
#24 by Serginio1
Да и очень часто использую. Например для универсального списания по партиям
#25 by Serginio1
Хэш это берется хэштаблица которая и будет результатом. Ничего сортировать не надо
#26 by H A D G E H O G s
Зачем нам в результате хеш таблица?
#27 by H A D G E H O G s
sort group by работает по тому алгоритму, который я привел? Я был прав?
#28 by Serginio1
А нам нужны тоько неповторяющиеся значения Например Соответствие[Ключ]=1; КонецЦикла
#29 by Serginio1
Да.
#30 by H A D G E H O G s
Вы очень тяжко выражаете свои мысли.
#31 by H A D G E H O G s
Мы получили хеш таблицу, в ней есть повторяющиеся значения хеша, в случайном порядке. Мы должны: 1) Упорядочить таблицу по хешу и работать по алгоритму либо: 2) Обойти таблицу и собрать массив уникальных хешей, на каждом шаге проводя поиск в массиве.
#32 by Гёдза
в хэш таблице не повторяющихся значений
#33 by Гёдза
хэш таблица автоматически упорядочена. Для понимания рассматривай ее как соответствие
#34 by Serginio1
А чего там тяжкого? Для sort group by нужно предварительно отсортировать. Для Хэш таблицы она стротися по ходу. Кстати нашел мои изыскания по сортировке слиянием на Delphi
#35 by Serginio1
Нет в Хэш таблице повторяющихся значений Еще раз Для каждого стр из Тз Цикл КонецЦикла
#36 by Serginio1
Смысл такой если процент уникальных значений мал, то применяем Хэш таблицу, так как затраты на сортировку будут больше чем построение Хэш таблицы А вот если повторяющихся значений мало то тут рулит сортировка
#37 by H A D G E H O G s
Ясно
#38 by H A D G E H O G s
Еще раз, для закрепления. Таблица: НомерСтроки Номенклатура В хештаблице будут2 записи: 1)первая запись - хеш от слова "Яблоки", ссылка на строку номер 3. 2)вторая запись - хеш от слова "Груши", ссылка на строку номер 2. Так?
#39 by H A D G E H O G s
Номер строки - это не аггрегирующее поле, это идентификатор строки, RID.
#40 by Serginio1
для Distinct вообще берется HashSet. Там только ключи
#41 by Serginio1
Для соединений например можно сделать Хэш таблицу где значениями может быть массив дублей ключей. Но это другая задача
#42 by МишельЛагранж
>>Для sort group by нужно предварительно отсортировать. Для Хэш таблицы она стротися по ходу. - так я и не уловил, в чем разница, если 98% сравниваемых таблиц - это случай из ( 36), когда уникальных значений основная масса. И как тут выбрка по хэшу будет существенно быстрее?
#43 by SanGvin
Если нет агрегатов, DISTINCT, иначе GROUP BY
#44 by Serginio1
Хэш будет быстрее когда уникальных значений существенно меньше исходных данных. То есть количество строк в результирующей таблице значительно меньше, чем в исходных данных. Мы экономим на сортировке исходных данных. А вот когда количество строк в результирующей таблице составляет 98% то однозначно лучше сортировка. А вот процент раздела какой алгоритм лучше использовать только экспериментально.
#45 by H A D G E H O G s
SQL собирает статистику по уникальности аггрегирующих полей?
#46 by Serginio1
Ну запрос кэшируется. Могут кэшироваться и результаты от параметров. Задача БД выбрать оптимальный алгоритм и многое можно сделать учитывая статистику
#47 by МихаилМ
для postgreSQL использовать Distinct - не рекомендуется
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С