powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка данных без дубликатов из таблицы в 200000 записей
22 сообщений из 47, страница 2 из 2
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241212
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Johnmen
Извиняй за грубость, но для непонятливых :

Не Убитых енотов, не Буказоидов и уж точно не Другое, а просто IB(FB) читает записи
и количество этих чтений 200000*200000 = 40 000 000 000 (записей).
Такой запрос будет неделю выполняться ...

P.S. И эту проблему не решить иначе, чем использовать ХП, а поскольку у
Nikita Krivtsov нет возможности вносить изменения (хотя почему такие жесткие условия), то решения просто нет ...
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241227
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarWind

подобный запрос который предлагали у меня работает менее секунды, при индексах разумеется.

Не забывай про кол-во записей в таблице, у меня тоже "быстро" (30 сек) , но их там 17000. А тут и индексов нет ...
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241249
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dnico

Сорри, я забыл указать кол-во записей в таблицах... порядка 300000 пропишу прописью, триста тысяч!
и не надо заливать что ХП единственная возможность
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241304
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarWind
НЕ ВЕРЮ - ПИШИ ЗАПРОС ПРОВЕРЮ НА СВОИХ 300000 записях ... Индекс по дате есть ... и по ID тоже ...
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241325
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Dnico
>Извиняй за грубость, но для непонятливых :

Да все нормально. И я к ним не отношусь.
А по поводу чтений - неужели ты думаешь, что за 1 (одну) операцию чтения читается одна запись ??? :)
Поверь, это совсем не так. Единицой чтения является страница. На которой м.б. несколько записей. Поэтому указанное тобой произведение 200000*200000 ни о чем не говорит.
И уж тем более неделя здесь совсем неуместна...:)
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241356
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Johnmen
Если вдаваться в подробности, то я согласен, там все не так просто, но все равно существует элементарные операции выборки записей. Так вот я говорю об этом количестве выборок ... И существует еще и реальный пример, который показывает статистику выполнения запроса. Могу показать ...
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241364
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from table1 where dtime = (select max(dtime) from table1)
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241382
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarWind

Ну и что дает этот запрос ? Ничего того, что нужно ... Тем более одну запись ...
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241389
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>StarWind

Ни-ни...:)

>Dnico

Да нет, не надо...

Уже отклонились от темы. А по ней видится 2 решения, каждое из которых надо попробовать :
1. Индекс+Запрос
2. ХП с соотв-ей логикой
И п.2, скорее всего, в данном случае, самое быстрое решение.
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241397
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, протупил с запросом....
но честно гвооря надо проэксперементировать
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241409
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Johnmen
Вот я и говорю, что через запрос это просто почти невозможно ... очень долго.
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32241626
Vagoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
**************************************************************
select good_id, price, last_edt
from table_2000 t1
where last_edt=(select max(last_edt) from table_2000 t2 where t2.good_id = t1.good_id)

------ Performance info ------
Prepare time = 3ms
Execute time = 16s 516ms
Avg fetch time = 4 129,00 ms
Current memory = 18 118 656
Max memory = 18 398 384
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 6
Fetches from cache = 8 033 956


**************************************************************

select t1.good_id, price, max(t1.last_edt)
from table_2000 t1
group by good_id, price
having last_edt=(select max(t2.last_edt) from table_2000 t2 where t2.good_id = t1.good_id)

------ Performance info ------
Prepare time = 4ms
Execute time = 16s 188ms
Avg fetch time = 952,24 ms
Current memory = 18 124 800
Max memory = 18 398 384
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 7 840 702


**************************************************************
select good_id, max(last_edt), (select max(price) from table_2000 t2 where t2.table_id = t1.table_id) as price
from table_2000 t1
group by good_id

------ Performance info ------
Prepare time = 6ms
Execute time = 127ms
Avg fetch time = 7,47 ms
Current memory = 18 263 128
Max memory = 18 518 296
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 6
Fetches from cache = 14 057
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242050
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Vagoo

В последнем примере ошибка :) И даже не одна...
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242093
Vagoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Johnmen

Может быть.
Зато оно работает и дает правильный результат :)
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242124
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vagoo

Execute time = 127ms Отличный результат, только вот один вопрос: По каким полям у тебя индексы и какой план получается?

P.S. И ище у тебя комп случаем не 64-х процессорный ? А то я уже минут пять жду результатов по этому запросу?
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242125
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Vagoo

И результат дает неверный :) Неверный принципиально !
Верный результат - это тебе так кажется, поскольку он основан на твоих данных, которые обладают специфической однобокостью. (Напр. макс. дате соответствует макс.цена, что не явл-ся обязятельным)
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242169
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мои результаты :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select id, max(dt), (select max(price) from delivery t2 where t2.id = t1.id) as price
from delivery t1
group by id

Адаптированный план
PLAN (T2 INDEX (DELIVERY_IDX1)) PLAN (T1 ORDER DELIVERY_IDX1)

 /* DELIVERY_IDX1 - индекс по ID */ 


 ------ Performance info ------
 
Prepare time = 0ms
Execute time = 16m 16s 634ms
Avg fetch time =  39   065 , 36  ms
Current memory =  9   726   892 
Max memory =  9   861   124 
Memory buffers =  2   048 
Reads from disk to cache =  112   868 
Writes from cache to disk =  6 
Fetches from cache =  627   087   723 
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242215
Vagoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Dnico

select id, max(dt), (select max(price) from delivery t2 where t2.id = t1.id) as price
from delivery t1 group by id


В твоем запросе существует один ID , который по всей видимости товар.
А у меня GOOD_ID - товар, TABLE_ID - идентификатор записи, он же праймери кей, естественно он же и индекс.

Поэтому и время отличается, наверное.



> Johnmen

Что касается однобокости - то действительно я таблицу сгенерил. Но после этого внес руками изменения в несколько рекордов, для контроля.
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242282
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Dnico

Вот это абсолютно похоже на правду ! Единственное не max(price), а max(date).

>Vagoo

Еще раз попытаюсь объяснить, что твой запрос ПРИНЦИПИАЛЬНО НЕВЕРЕН !
Потому, что соединять надо не по ключу, а по идентификатору товара !
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242357
Vagoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Johnmen

Я не отрицаю, что запрос принципиально не верен. Я его сделал случайно и очень удивился когда оно заработало.

Более того, специально слепил таблицу на 200000 строк и убедился что цена получается неправильная, хоть и работает бысто :(

Но почему тогда запрос из таблицы в 2000 строк дает верный результат ?
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32242709
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все равно получается ерунда ... не дает все это нужного результата ... УВЫ!
...
Рейтинг: 0 / 0
Выборка данных без дубликатов из таблицы в 200000 записей
    #32243137
Vagoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, не дает...

Прошу прощения за мороку.
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка данных без дубликатов из таблицы в 200000 записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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