powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Установление неявного соответствия между строками
16 сообщений из 41, страница 2 из 2
Установление неявного соответствия между строками
    #38992579
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

С чего бы? UPDATE идет по индексу первичного ключа. Проверил, все ок.
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992584
MrCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Безумное предложение. Берём генератора - G1 и G2 - с равными значениями...
Код: 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.
-- это выборка из первой таблицы SEL1
select 
  T1.id as idl, T1.a, g1.gv as gvl
from 
  Ti
  left join (
    select gen_id(Gi) as gv from rdb$database) as g1
   
-- её можно сджойнить с аналогичной выборкой SEL2 (из второй таблицы) по gvl
select ...
from 
  SEL1 
  left join SEL2
    on SEL1.gvl = SEL2.gvl

-- Т.е. получаем набор данных, где T1.A соответствует T2.A. 
-- Заметим, что если никто не трогает генераторы, а кол-во
-- записей в таблицах всегда совпадает, то набор можно получать
-- сколь угодно часто.

-- из полученного набора можно отфильтровать 
-- по id той таблицы, в которую пойдёт вставка.

-- И вуаля!
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992596
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperВот решение:
Как я и подозревал, оно трёхэтажное. Сойдёт для sql-ex.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992665
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Главное, что оно рабочее. А люди здесь безаппеляционно утверждали, что в FB 1.5 так сделать нельзя и при этом не приводили никаких аргументов. Это как минимум странно для такого серьезного сообщества профессионалов, как sql.ru.
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992674
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrCatБезумное предложение. Берём генератора - G1 и G2 - с равными значениями...
Код: 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.
-- это выборка из первой таблицы SEL1
select 
  T1.id as idl, T1.a, g1.gv as gvl
from 
  Ti
  left join (
    select gen_id(Gi) as gv from rdb$database) as g1
   
-- её можно сджойнить с аналогичной выборкой SEL2 (из второй таблицы) по gvl
select ...
from 
  SEL1 
  left join SEL2
    on SEL1.gvl = SEL2.gvl

-- Т.е. получаем набор данных, где T1.A соответствует T2.A. 
-- Заметим, что если никто не трогает генераторы, а кол-во
-- записей в таблицах всегда совпадает, то набор можно получать
-- сколь угодно часто.

-- из полученного набора можно отфильтровать 
-- по id той таблицы, в которую пойдёт вставка.

-- И вуаля!


Идея имеет право на существование. Но в FB 1.5 разве можно делать джойны подзапросов?
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992676
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

эффективность этого решения оставляет желать лучшего. Попробуй прогони его на табличках с десятками миллионов записей
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992692
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Не спорю. Но сама задачка весьма интересна.
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992696
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пощупай на других SQL-серверах и огорчись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992706
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Речь здесь о Firebird. На других серверах также задача решается, например, очень просто сделать это на Oracle с использованием материализованных представлений WITH.
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992716
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperМимопроходящий,

Речь здесь о Firebird. На других серверах также задача решается, например, очень просто сделать это на Oracle с использованием материализованных представлений WITH.

На Oracle 1.0 ?
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992721
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

в тройке тоже можно намного эффективней сделать

Код: 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.
MERGE INTO T1
USING (WITH T1_1
       AS (SELECT
               ID,
               A,
               ROW_NUMBER() OVER(ORDER BY ID) AS RN
           FROM
               T1),
       T2_2
       AS (SELECT
               ID,
               A,
               ROW_NUMBER() OVER(ORDER BY ID) AS RN
           FROM
               T2)
       SELECT
           T1_1.ID AS ID,
           T2_2.A AS A
       FROM
           T1_1
           JOIN T2_2 ON T1_1.RN = T2_2.RN) SRC  
ON T1.ID = SRC.ID
WHEN MATCHED THEN
  UPDATE SET A = SRC.A
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992723
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Interloper!
You wrote on 25 июня 2015 г. 14:32:57:

Interloper> с использованием материализованных представлений WITH.
безалаберное использование малознакомых терминов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38992755
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Да нет, понятно о чем идет речь. Гораздо более безалаберно было утверждать "обломись на 1.5". У чужих в глазу соринку видим?
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38993032
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperЭто как минимум странно для такого серьезного сообщества профессионалов, как sql.ru.Профессионалы потому и серьёзные, что не лезут на шкаф только потому, что это возможно.
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38993224
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperДа нет, понятно о чем идет речь. Гораздо более безалаберно было утверждать "обломись на 1.5". У чужих в глазу соринку видим?

Ради интереса сделал тестовый пример. Залил совсем чуть-чуть записей 10к штук

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Запрос автора 
Время работы 1 мин 30 сек
Кол-во чтений T1    49 995 000
Кол-во чтений T2    50 005 000 


Процедура с for select и поиском id по skip (см мой пост выше)
Время работы          37 сек
Кол-во чтений T1   50 015 000
Кол-во чтений T2       10 000


(в FB 2.0 и выше)
Процедура с for select по одной таблице и declare cursor по второй таблице
Время работы  265  мс 
Кол-во чтений T1       20 000
Кол-во чтений T2       10 000


На FB 1.5 я бы добавил в каждую таблицу по дополнительному столбцу ido integer и запустил бы такую SP
Код: plsql
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.
create or alter procedure PRC3
as
declare variable I integer;
declare variable ID integer;
declare variable A integer;
begin
  i = 1;
  for select id from t1 order by id into :id do
  begin
     update t1 set t1.ido = :i where id = :id;
     i = i + 1;
  end

  i = 1;
  for select id from t2 order by id into :id do
  begin
     update t2 set t2.ido = :i where id = :id;
     i = i + 1;
  end

  for select id, a from t2 order by id into :id, :a  do
  begin
     update t1 set t1.a = :a where t1.ido = :id;
  end
end



Код: plaintext
1.
2.
Время работы  9 с
Кол-во чтений T1       20 000
Кол-во чтений T2       30 000
...
Рейтинг: 0 / 0
Установление неявного соответствия между строками
    #38993333
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Граур Станислав,

мой запрос. В каждой таблице по 10k записей

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
10000 записей было обновлено в таблице T1

------ Информация о производительности ------
Время подготовки запроса = 47ms
Время выполнения запроса = 281ms
Current memory = 145 457 264
Max memory = 153 581 000
Memory buffers = 16 384
Reads from disk to cache = 0
Writes from cache to disk = 0
Чтений из кэша = 174 548

но он только на трёшке работает
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Установление неявного соответствия между строками
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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