Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Оптимизация обработки дубликатов / 8 сообщений из 8, страница 1 из 1
03.07.2007, 12:36
    #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
03.07.2007, 13:57
    #34634949
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация обработки дубликатов
СУБД какая
...
Рейтинг: 0 / 0
03.07.2007, 14:36
    #34635117
Slaven
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация обработки дубликатов
SA 10
...
Рейтинг: 0 / 0
03.07.2007, 14:40
    #34635130
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация обработки дубликатов
SlavenSA 10
что это такое?
...
Рейтинг: 0 / 0
04.07.2007, 06:56
    #34636615
Slaven
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация обработки дубликатов
SQL Anywhere 10....проще говоря Sybase
...
Рейтинг: 0 / 0
04.07.2007, 10:35
    #34636956
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация обработки дубликатов
ага. понял, к сожалению с ней не работал, но всеравно - не проще ли будет это все офромить хранимой процедурой, если там такие есть?
...
Рейтинг: 0 / 0
04.07.2007, 14:31
    #34638098
Slaven
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация обработки дубликатов
хранимой процедурой не получится, ибо пользователю нужен интерфейс для запуска сей операции
...
Рейтинг: 0 / 0
04.07.2007, 14:35
    #34638115
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация обработки дубликатов
ну нарисуйте ему форму с кнопкой "УДАЛИТЬ ДУБЛИКАТЫ"

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


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