Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удалить дубли в таблице [D7, IB6.x]


Страницы:   1 2 3

Vlad ©   (2003-09-25 10:26:00) 

Доброго всем времени суток.
Есть таблица, в которой основные поля: ID (integer,уникальное), Код(integer), Дата(Date), Наименование(Varchar).
Помимо них есть еще штук 15 полей.
Нужно из таблицы удалить дублирующие записи, так, чтобы связка Код-Дата-Наименование стала уникальной.
Проблема в том что в таблице порядка 12 млн записей.
Кто нибудь подскажет наиболее быстрый алгоритм решения задачи, выполнение которого было бы <= 24 часа ?
Все перепробованные мной способы, по предварительным подсчетам, выполнялись быкак минимум трое суток.
Спасибо.


Vlad   (2003-09-25 11:35:00) [41]

А в Yaffil SINGULAR прокатит ?


Sandman25   (2003-09-25 11:28:00) [42]

[2] Johnmen © (25.09.03 10:38)
>Стандартно

Informix ругается, что "Cannot modify table or view used in subquery".
Это ANSI SQL?


Johnmen   (2003-09-25 11:27:00) [43]

>Romkin © (25.09.03 11:10)

Да, можно и так попробовать
DELETE FROM Table A
WHERE NOT SINGULAR (SELECT * FROM Table B
WHERE (A.Код=B.Код) AND
(A.Дата=B.Дата) AND
(A.Наименование=B.Наименование))


Можно еще ч.-н. придумать с ХП.


Vlad   (2003-09-25 11:11:00) [44]

Индексы есть все, кроме составного. Попробую составить составной :)
>О результатах - доложить лично, в этой конференции !
Так точно !


Romkin   (2003-09-25 11:10:00) [45]

В IB есть singular
Я бы процедуру написал...


Johnmen   (2003-09-25 11:09:00) [46]

>DenK_vrtz © (25.09.03 10:56)

Даже навскидку не представляю :)

>Vlad © (25.09.03 11:03)

Для ускорения стоит поэкспериментировать :
1. Создать индексы на Код, Дата, Наименование
2. Создать составной индекс на Код, Дата, Наименование

О результатах - доложить лично, в этой конференции !
:)))


DenK_vrtz   (2003-09-25 11:06:00) [47]

Vlad ©, результатики эксперимента выложи! ОК?!


Vlad   (2003-09-25 11:03:00) [48]

Правда есть сомнения.... Count по определению медленно работает.


Vlad   (2003-09-25 11:02:00) [49]

Я время пока не прикидывал, но дома попробую на 100 тыс. записях такой запросик. Если минут за 10-15 отработает, то устроит.


DenK_vrtz   (2003-09-25 10:56:00) [50]

Johnmen © (25.09.03 10:38) [2], как думаете, на вскидку, времени сколько займет обработать выше указанный объем?


Vlad   (2003-09-25 10:49:00) [51]

>Johnmen © (25.09.03 10:38) [2]
Все понял.
Туплю, знаете ли с утра :)
Спасибо.


Vlad   (2003-09-25 10:47:00) [52]

>DenK_vrtz © (25.09.03 10:37) [1]
Данные остальных 15 полей во внимание не принимать. Главное чтоб вышеуказанная связка осталась уникальной.
>Johnmen © (25.09.03 10:38) [2]
Интересное решение. Что-то я с утра не соображу как эта хрень работать должна ? Т.е. мне еще одну такую же таблицу создать, куда перелить все данные из исходной чтоли ? :)


Johnmen   (2003-09-25 10:38:00) [53]

Стандартно
DELETE FROM Table A
WHERE 1<(SELECT COUNT(*) FROM Table B
WHERE (A.Код=B.Код) AND
(A.Дата=B.Дата) AND
(A.Наименование=B.Наименование))


DenK_vrtz   (2003-09-25 10:37:00) [54]

Думаешь реально на таких объемах быстрее сделать?
А с данными остальных 15 полей как быть? Они одинаковы?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо