powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Группировка в больших таблицах?
25 сообщений из 40, страница 1 из 2
Группировка в больших таблицах?
    #33535599
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: есть несколько больших таблиц, в которых есть некое числовое поле К, по которому нужно посчитать некую статистику (= сделать группировку).

Есть два пути:
1. сделать сначала ЧАСТИЧНЫЕ группировки по "естественно заданному" материалу, то есть - в данном случае - по каждой отдельно таблице; потом - слить результаты этих частичных группировок в одну таблицу и еще раз повторить группировку.

2. слить сразу исходные данные (необходимые для группировки поля) в одну ГИГАНТСКУЮ таблицу, а потом - один раз - провести по ней группировку.

Какой способ предпочтительнее, при условии, что даже каждая из исходных таблиц уже является большой - в том смысле, например, что не вмещается в оперативную память компьютера?
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33535663
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSКакой способ предпочтительнее, при условии, что даже каждая из исходных таблиц уже является большой - в том смысле, например, что не вмещается в оперативную память компьютера?А почему не третий, сразу написать запрос, берущий данные из всех таблиц без каких-либо копирований ? СУБД обычно и так неплохо умеют работать в условиях нехватки памяти.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33535737
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле - UNION? Но это, я так понимаю, разновидность 2-го варианта, поскольку Engine сольет все в одну (временную) таблицу, которую потом будет группировать.

Насчет того, что "хорошо умеет" - наверное ... Вопрос у меня в следующем: если таблица гигантская, то Engine всяко ее будет обрабатывать как-то по частям; и если у меня данные исходно разбиты на много частей, так может их целесообразно так - по частями - и предобработать?
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33535823
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSВ смысле - UNION? Но это, я так понимаю, разновидность 2-го варианта, поскольку Engine сольет все в одну (временную) таблицу, которую потом будет группировать.Не уверен, очень многое зависит от СУБД и оптимизатора запросов. Промышленные СУБД, как правило, имеют алгоритмы для работы с данными, не помещающимися в ОЗУ, с минимизацией обращения к файлам. Ваше право - попытаться облегчить работу для СУБД, но, возможно, сначала стоило бы дать шанс СУБД, не исключено, что у нее это лучше получится. В конце концов, их для этого и пишут :)
Искренне сожалею, но вряд ли смогу Вам помочь выбрать лучший вариант, так как есть сильная зависимость от конкретной ситуации. Например, 2 вариант невозможен, по причине нехватки свободного дискового пространства для копирования всей информации в одну таблицу. Да и копирование такое может потребовать неслабой дисковой активности, по типу, прочитал здесь, записал там, опять же, логирование может сильно увеличить нагрузку на диск. Поэтому 1 вариант выглядит несколько привлекательней, но у него могут быть свои трудности. В принципе, лучше один раз пройтись по одной таблице, чем много раз по разным, хотя бы потому что может пострадать общая эффективность физического чтения из-за невозможности упреждающего чтения. Опять же результаты придется тоже писать, а потом выполнять еще одну группировку. Насколько часто придется выполнять эту процедуру, какая активность будет на сервере, OS, СУБД, hardware, RAM, сколь велико отношение объема таблиц к ОЗУ, какие индексы, если используются ? В общем, нюансов масса и не уверен, что их можно учесть все, по крайней мере, в общем случае :) Так что, IMHO, если есть возможность, а процедура повторяющаяся, то, наверное, лучше проверить все варианты, хотя бы по разу. Не исключено, что в Вашей ситуации только один из вариантов окажется абсолютным победителем, хотя, повторюсь, сначала стоит дать шанс СУБД, вдруг результат Вас вполне устроит ?
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536550
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSДано: есть несколько больших таблиц, в которых есть некое числовое поле К, по которому нужно посчитать некую статистику (= сделать группировку)...есть вероятность, что по полю K в некоторых "больших" таблицах есть индексы а также по иным полям, участвующим в выборках. Т.е вероятно вот это будет разумно
SELECT xxx, ...
FROM
(SELECT yyy, ... FROM T1 GROUP by K
UNION ALL
SELECT yyy, ... FROM T2 GROUP by K
...
UNION ALL
SELECT yyy, ... FROM Tn GROUP by K
) GROUP by Y

и ваапше "выборка в промежуточную таблицу" (но всё-таки выборочная, а не сплошной слив) обычно применяется на клиент-сервере (в локальную копию - где ее многократное перепрочтение дешевле), или при плохом владении SQL (за исключением случаев необходимости получения набора данных для многократного мспользования в разных участках некой процедуры/запроса).
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536567
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 обычно применяется на клиент-сервере читать файл-сервере (пентература, мля, и ваабчхи )
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536650
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321есть вероятность, что по полю K в некоторых "больших" таблицах есть индексы
- нет, в моей конкретной задаче индексов нет. Хотя, согласен, это - существенное обстоятельство, которое я должен был упомянуть!

4321SELECT xxx, ...
FROM
(SELECT yyy, ... FROM T1 GROUP by K
UNION ALL
...
SELECT yyy, ... FROM Tn GROUP by K
) GROUP by Y
[/quot]
- это я расцениваю как разновидность первого обозначенного мной варианта, поскольку на каждый "внутренний" SELECT - Engine будет создавать некую внутреннюю таблицу ...
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536683
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321и ваапше "выборка в промежуточную таблицу" ..... за исключением случаев необходимости получения набора данных для многократного мспользования в разных участках некой процедуры/запроса).
Да и для этого выборка в промежуточную таблицу не то чтобы особо нужна.

Код: plaintext
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.
SQL> create sequence s ;

Sequence created

SQL> create function f return integer is
   2     res integer ;
   3   begin
   4     select s.nextval into res from dual ;
   5     return res ;
   6   end ;
   7   /

Function created

SQL> select f from dual connect by level <=  10  ;

         F
----------
          1 
          2 
          3 
          4 
          5 
          6 
          7 
          8 
          9 
         10 

 10  rows selected

SQL> with
   2     s as ( select f from dual connect by level <=  10  )
   3   select
   4     s1.f,
   5     s2.f,
   6     s3.f
   7   from
   8     s s1 left outer join s s2 on ( s1.f = s2.f +  1  )
   9     right outer join s s3 on ( s1.f = s3.f -  1  ) ;

         F          F          F
---------- ---------- ----------
         12           11           13 
         13           12           14 
         14           13           15 
         15           14           16 
         16           15           17 
         17           16           18 
         18           17           19 
         19           18           20 
         11                      12 
                               11 

 10  rows selected
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536690
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSпоскольку на каждый "внутренний" SELECT - Engine будет создавать некую внутреннюю таблицу ...
Говоря простым языком, Вы гоните.

Я так подозреваю, на самом деле Вы используете некое свое представление о работе СУБД и некую свою терминологию, и в их рамках Ваше утверждение верно. Проблема только в том, что эта терминология очень уж расходится с принятой, а Вы не озаботились растолковать, что же Вы имеете в виду.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536737
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot softwarer] Да и для этого выборка в промежуточную таблицу не то чтобы особо нужна.

[src oracle] ну это "ит-дипендз"
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536757
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык, может и "гоню" ...
А Вы утверждаете, что - при выполнении запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT xxx, ...
FROM
(SELECT yyy, ... FROM T1 GROUP by K
UNION ALL
...
SELECT yyy, ... FROM Tn GROUP by K
) GROUP by Y
- внутренние селекты НЕ БУДУТ выполняться (enginе-ом) по-отдельности?

Конечно, можно исходить из того, что - не наше дело, как работает enginе .
Да только ... проблема в том, что ресурсов у компьютера маловато ... для моей задачи. И, можно сказать, что "в лоб" enginе просто не работает !
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536857
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS enginе просто не работает ! вопрос должен ставицца так:
Дано - инжайн - такой-то.
вопрос - чито ему надо отвинтить нахрен?, чтобы он таки фурыкал.

А ви таки гонити.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536903
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нууу ... скажу я Вам, что Engine - MS Access ... и что Вы посоетуете ему "отвинтить", чтобы он "летал" на таблицах больше Гига?
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33536956
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSнууу ... скажу я Вам, что Engine - MS Access ... и что Вы посоетуете ему "отвинтить", чтобы он "летал" на таблицах больше Гига?а данные иде? на клиенте, или на файл - сервере?
1. Я бы выкачал базку с данными к себе
2. Я не делал бы глупостей типа попытки записать данные в одну та блитцу. (разве что сильно уже усеченные по числу строк выборки)
3. Я бы таки подумал, а не помогут ли мне те или иные индексы.
4. На худой конетц можно руками открыть рекордсеты (табличные, а не по запросам) и бежать по ним. При наличии нужного индекса (и его задании после открытия таблицы) такая пробежка немногим хуже самого енжайна, а если вы данные пробежки _очень_компактно_ куда-то пишете (группируя по мере изменения значения индекса), то память вам сильно не потребуется. (одна запись рекордсета + буфер накопления агрегатов для текущего значения индекса). Но ждать на гигабайтных данных вам таки придется.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537104
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все данные на клиенте, это вообще - локальная задача.

На самом деле - есть-таки третий вариант, к которому я сейчас и склоняюсь:
писать данные, только не в нов ую , а - в нов ые таблица, разделяя эти данные СРАЗУ на классы по значению ключа.

Конкретно, у меня ключ, по которому нужно групировать иследуемые данные, состоит из двух целочисленных полей. И я решил выписывать все данные в ЧЕТЫРЕ промежуточных таблицы - разделяя их по значениям пары (К1 mod 2, K2 mod 2).
А потом - в каждой из этих четырех таблиц по очереди - производить группировку.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537140
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSВсе данные на клиенте, это вообще - локальная задача.

На самом деле - есть-таки третий вариант, к которому я сейчас и склоняюсь:
писать данные, только не в нов ую , а - в нов ые таблица, разделяя эти данные СРАЗУ на классы по значению ключа.

Конкретно, у меня ключ, по которому нужно групировать иследуемые данные, состоит из двух целочисленных полей. И я решил выписывать все данные в ЧЕТЫРЕ промежуточных таблицы - разделяя их по значениям пары (К1 mod 2, K2 mod 2).
А потом - в каждой из этих четырех таблиц по очереди - производить группировку.мдя. ф сис теме без функциональных индексов вводить ключи, инфа из которых извлекаеццца токо методом декомпозиции, причем декомпозирующая ф-я не монотонна...
И кто же вам насоветовал искать таких приключений на свой бэк-сайд?
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537265
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то Вы такое мудреное сказали, я не понял!

1. "ф системе без функциональных индексов" - ну да, в смысле -там индексы может и есть - свои в каждой таблице, но к тем полям, по которым мне нужно произвести ИССЛЕДОВАНИЕ (=группировку) они отношения не имеют.

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

Еще раз: я выписываю из очччень разнородных таблиц данные, подготавливая их к последующей группировке, и сразу разделяя их на N таблиц - по тривиальному критерию. Так, что значения "признаков группировки" (= ключа) для записей (разных из этих N) таблиц заведомо не пересекаются ...

В чем ересь?
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537318
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как я понял, ключи у вас становятся осмысленными только после воздействия на них ф-й вида
К1 mod 2 (т.е. "декомпозиции" - ф том смысле, что клютч не есь значимая велична, а есть композиция значимых величин, которые могут быть из него извлечены).
т.е. мы имеем полный бардак на литце. (как правило это любят деить любители банд - поразрядных операторов BAND и т.п.)

Если бы вы могли создать индекс не по К1, а именно по (К1 mod 2), то это било бы еще терпимо, (но усе равно - идиотством, имхо). Но аксесс под это не заточен. Не умеет он функциональных индексов.

Если бы композирующая/декомпозирующая ф-я была монотонной, вы (но не движок - он об этом не знает) могли бы воспользоваться обычным индексом .
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537339
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, Вы неправильно поняли:
mod я применяю только для того, чтобы разделить все множество значений интересующего меня ключа на четыре примерно одинаковых подмножества,
и чтобы рассортировать выписываемые записи сразу в четыре таблицы,

- в ндежде, что я потом смогу эти таблицы обработать по отдельности, поскольку целиком получающийся массив записейсквозь Engine не пролезает.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537359
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, как я понял, вам надо сгрупировать _всего_ четыре (в клюяах нет Null) записи - по количеству вариантов декомпозированных ключей (0,0)(0,1)(1,0)(1,1). ТАк откройте массив (0 to числоПолейРезультата, 0 to 3) вариантов, и копите туда свои агрегаты по мере MoveNext _по таблицам_. К памяти это не критично.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537381
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 ну это "ит-дипендз"
Безусловно. Собственно, "ит дипендз" - вообще универсальный рефрен для любых местных обсуждений. Я в данном случае хотел показать, что это возможно. Ну и подозреваю, что постепенно это перейдет в "возможно практически везде".

Иван FXSА Вы утверждаете, что - при выполнении запроса:......
- внутренние селекты НЕ БУДУТ выполняться (enginе-ом) по-отдельности?
Я утверждаю нечто совершенно другое, никак не связанное со сказанным Вами сейчас. Поэтому сказанное комментировать не буду.

Еще раз: я утверждаю, что данный запрос может быть выполнен без использования каких бы то ни было "внутренних промежуточных таблиц для каждого подзапроса". Как он выполняется в Вашем случае - вопрос для форума по соответствующей БД, и как его выполнить быстро - вопрос туда же.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537403
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели я так непонятно объясняю?

Мне необходимо посчитать статистику по ключу, состоящему из ПАРЫ целочисленных значений, находящихся в пределах от 1 до приблизительно 16 000 000.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537415
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSНет, Вы неправильно поняли:
теперь понял, что я всё неправильно понял :).

ЗЫ1 А что, Top (+count + max) не годится для разборки таблицы на части? Обязательно надо mod-ить?

короче, ставьте задачу конкретно, раз общие соображения ведут вас несколько не в ту степь.
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537422
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
последний постер адресован 4321
...
Рейтинг: 0 / 0
Группировка в больших таблицах?
    #33537450
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321ЗЫ1 А что, Top (+count + max) не годится для разборки таблицы на части? Обязательно надо mod-ить?
- идея состоит в том, чтобы не просто "разобрать таблицу на части", а в том, чтобы разобрать ее так, что все записи со значением ключа:
(10000,20000) - попадут в одну "часть",
а все записи со значением ключа:
(10001,20000) - попадут в другую.

Тогда - проведя группировку в каждой из получившихся таблиц ОТДЕЛЬНО (и по очереди) - я смогу потом просто "слить" результаты.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Группировка в больших таблицах?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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