Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.16;
Скачать: CL | DM;

Вниз

Удалить дубли в таблице   Найти похожие ветки 

 
Vlad ©   (2003-09-26 10:29) [40]

В любом случае, спасибо всем кто участвовал.
Конечно не ожидал я такого результата.
При проверке на 100 тыс. надо было видеть мое выражение лица!
Готовый к самому худшему, налил кофе, нарезал бутербродов, взял секундомер, приготовился ждать. И на тебе ! 2 секунды :)))


 
Johnmen ©   (2003-09-26 10:32) [41]

>Vlad ©
>DenK_vrtz ©

Мужики, не смущайте меня :) Мне неловко...

>Vlad ©

Если несложно, приведи планы выполнения запросов [2] и [12].
Мне почему-то представлялось, что [12] д.б. быстрее [2]...
Но на этот вопрос дадут ответ планы.


 
Vlad ©   (2003-09-26 10:35) [42]

>Johnmen © (26.09.03 10:32) [41]
К сож. YaP упорно молчит про планы :) Так уж он устроен.
Пишет только то, что использовался тот самый составной индекс.


 
Johnmen ©   (2003-09-26 11:10) [43]

>Vlad © (26.09.03 10:35)

Жаль... Придется самому пробовать, когда выдастся достаточно своб.времени...:)


 
Johnmen ©   (2003-09-26 11:33) [44]

>Vlad ©

Кстати, я тут подумал на предложениями kaif ©, и вот предлагаю попробовать такую схему (только если борьба за скорость):
1. CREATE TABLE Temp (ID INT)
2. Хр.процедура, общая схема :
DECLARE VARIABLE i1 INT
DECLARE VARIABLE v1, v2, v3, vo1, vo2, vo3 VARCHAR
vo1=""; vo2=""; vo3="";
FOR SELECT ID,f1,f2,f3 FROM Table INTO :i1,:v1,:v2,:v3
ORDER BY f1,f2,f3 DO BEGIN
IF ((v1=vo1) AND (v2=vo2) AND (v3=vo3)) THEN
INSERT INTO Temp VALUES(:i1);
vo1=v1; vo2=v2; vo3=v3;
END

3. Отрабатываем процедуру
4. DELETE FROM Table WHERE ID IN (SELECT ID FROM Temp)
5. DROP TABLE Temp

Очень интересует скорость ! :)


 
Vlad ©   (2003-09-26 11:42) [45]

А зачем при этом создавать временную таблицу ?
Почему нельзя чтобы ХП просто возвращала список ID, которые принадлежат дублирующим записям ?
Тогда: DELETE FROM Table WHERE ID IN (SELECT ID FROM Хранимая_процедура)


 
Johnmen ©   (2003-09-26 12:08) [46]

>Vlad © (26.09.03 11:42)

Да, можно и так попробовать. Но у меня есть некоторые сомнения по поводу оптимизации запроса.
Вобщем, попробуй и так и со врем.табл., если будет время/желание.


 
Vlad ©   (2003-09-26 12:18) [47]

Ок. Дома ради интереса попробую. В понедельник тогда отпишу.
Хотя вобщем моя цель уже достигнута. Дубли удалены. Их, кстати, как я и подозревал оказалось почти 1 млн.


 
Vlad ©   (2003-09-26 12:25) [48]

>Johnmen © (26.09.03 12:08) [46]
Кстати, по поводу планов. Ведь я использую Yaffil, а там, в отличие от самого IB существенно оптимизирован алгоритм их построения. Так что наши с тобой результаты могут отличаться, если ты используешь IB


 
kaif ©   (2003-09-26 13:44) [49]

Потрясающий результат!
Johnmen, мое почтение.
Зря, видно, я стараюсь обходиться самыми примитивными запросами.


 
Vlad ©   (2003-09-26 13:47) [50]

>kaif © (26.09.03 13:44) [49]
Твой вариант с ХП я буду пробовать на выходных, посмотрим что он даст по скорости.


 
kaif ©   (2003-09-26 13:58) [51]

Конечно, мне интересен и этот результат.
Хотя исходная задача уже решена блестяще (успеть менее, чем за сутки удалить дубликаты).
Я предлагал альтернативное решение только потому что не верил в скоростную приемлемость решения Johnmen...


 
DenK_vrtz ©   (2003-09-26 15:13) [52]

Грамотный запрос + Индексы = сила!!! :-)

Был тут у меня отчет. 22 минуты выполнялся(типа, сделал попробовал). Создал три! индекса, одну вьюшку подумал-переписал.

Результат - 45 сек!


 
Vlad ©   (2003-09-26 15:48) [53]

>DenK_vrtz © (26.09.03 15:13) [52]
Уточню.
Грамотный запрос + нужные индексы + грамотный оптимизатор = великая сила :)


 
NAlexey ©   (2003-09-26 15:54) [54]

Все это конечно интересно, но при создании индексов также необходимо учитывать насколько интенсивно происходит удаление-вставка в таблицу. А то может получиться что выборка летает, а при добавлении записи или каскадном удалениии сидим и ждем.



Страницы: 1 2 вся ветка

Текущий архив: 2003.10.16;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.157 c
6-51366
SergP
2003-08-20 01:31
2003.10.16
Вопрос об OnDisconnect в Tclient/serversocket


14-51453
djnv
2003-09-29 20:37
2003.10.16
Помогите решить задачку плиззз, народ помогите умираю!!!


14-51495
Е-Моё имя
2003-09-30 14:14
2003.10.16
все по норам! народный мститель пришел!!!!


3-51092
Алекси
2003-09-26 18:31
2003.10.16
перевод цифр в их словарные значения


8-51352
Strori
2003-05-21 10:58
2003.10.16
Ссылка в теле картинки