Подскажите, как реализовать следующее. Есть 5-6 таблиц в которые принимаются данные с разных клиентов.
надо эти таблицы синхронизировать (удалить из каждой зи таблиц все данные которые есть в других таблицах).
Был вариант сделать так:
DELETE FROM datagps WHERE Mobitel_id IN
(SELECT Mobitel_id from datagps_1)
AND UnixTime IN (SELECT UnixTime from datagps_1)
но я так и не дождался окончания выполнения этого запроса. Как еще можгно решать данную задачу ?
27.09.07 08:19: Перенесено модератором из '.NET' — TK
Здравствуйте, vitalik_4, Вы писали:
_>но я так и не дождался окончания выполнения этого запроса. Как еще можгно решать данную задачу ?
Во-первых, постараться не нагибать сервер запросами сложностью N*N. Ну и вообще стараться писать запросы в соответствии с их смыслом. Телепатически угадываю, что ты имел в виду:
DELETE FROM datagps dg WHERE
exists(select * from datagps_1 d1 where d1.id = dg.id and d1.UnixTime = dg.UnixTime)
Во-вторых, не забыть добавить индексы по (id, unixtime) в обе таблицы.
... << RSDN@Home 1.2.0 alpha rev. 677>>
_>>но я так и не дождался окончания выполнения этого запроса. Как еще можгно решать данную задачу ?
S>Во-первых, постараться не нагибать сервер запросами сложностью N*N. Ну и вообще стараться писать запросы в соответствии с их смыслом.
Та это понятно что надо стараться не нагибать сервер. Ну а если нужно ?
Телепатически угадываю, что ты имел в виду:
S>S>DELETE FROM datagps dg WHERE
S>exists(select * from datagps_1 d1 where d1.id = dg.id and d1.UnixTime = dg.UnixTime)
S>
так точно, именно это и имел ввиду
S>Во-вторых, не забыть добавить индексы по (id, unixtime) в обе таблицы.
такой возможности нет. Базу изменять нельзя.
Здравствуйте, Аноним, Вы писали:
А>такой возможности нет. Базу изменять нельзя.
Залей данные во времянку, сделай там нужный индекс. Надо смотреть на задачу, в некоторых случаях (правда нечастых
) может помочь.