powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Оптимизация обработки дубликатов
8 сообщений из 8, страница 1 из 1
Оптимизация обработки дубликатов
    #34634582
Slaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице table дубликатом считается запись, в которой совокупность значений полей 1,2,3 идентичны соответствующим значениям другой записи.
Поставлена задача удалить дубликаты из таблицы, обновив при этом ссылки из таблицы table2 на id единственной оставшейся записи table.
Пошел таким путем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
//Выбираю записи, для которых есть дубликаты
query = database.Select("select t.1,t.2,t.3 from (SELECT count(*) c,1,2,3 FROM table group by 1,2,3 t where c>1");
while (query.Read())
{
 //нахожу все дубликаты для соответствующей записи
 query2 = database.Select("SELECT ID FROM table WHERE 1='" + query[0].ToString() + "' AND 2='" + query[1].ToString() + "' AND 3='" + query[2].ToString() + "'");
 query2.Read();
 //id единственной остающейся записи
 String verId = query2[ 0 ].ToString();
 // перечень удаляемых id
 String delId = "";
 while (query2.Read())
 {
    delId += query2[ 0 ].ToString() + ",";
 }
 delId = delId.Substring( 0 , delId.Length -  1 );
 query2.Close();
 //обновляю ссылки в ссылочной таблице
 database.Update("UPDATE table2 SET col_ID="+verId+" WHERE col_ID IN ("+delId+")");
 //удаляю записи-дубликаты
 database.Update("DELETE FROM table WHERE ID IN ("+delId+")");
}
query.Close();

Эффективно, но с учетом того что в Table 3млн. записей жутко долго. Причем, естесственно update и delete выполняются моментом, а вот select id для каждого дубликата жутко долгий (около 0,8 сек каждый select).
Буду благодарен за любой подсказанный способ оптимизации алгоритма
...
Рейтинг: 0 / 0
Оптимизация обработки дубликатов
    #34634949
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СУБД какая
...
Рейтинг: 0 / 0
Оптимизация обработки дубликатов
    #34635117
Slaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SA 10
...
Рейтинг: 0 / 0
Оптимизация обработки дубликатов
    #34635130
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavenSA 10
что это такое?
...
Рейтинг: 0 / 0
Оптимизация обработки дубликатов
    #34636615
Slaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL Anywhere 10....проще говоря Sybase
...
Рейтинг: 0 / 0
Оптимизация обработки дубликатов
    #34636956
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага. понял, к сожалению с ней не работал, но всеравно - не проще ли будет это все офромить хранимой процедурой, если там такие есть?
...
Рейтинг: 0 / 0
Оптимизация обработки дубликатов
    #34638098
Slaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хранимой процедурой не получится, ибо пользователю нужен интерфейс для запуска сей операции
...
Рейтинг: 0 / 0
Оптимизация обработки дубликатов
    #34638115
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну нарисуйте ему форму с кнопкой "УДАЛИТЬ ДУБЛИКАТЫ"

или он должен контролировать вот это WHERE ID IN ("+delId+")");
в смысле, что попало в delId?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Оптимизация обработки дубликатов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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