Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление потерянных связей  [new]
gepard1980
Member

Откуда: Ярославль
Сообщений: 244
Вроде простая вещь, но прошу совета. Есть 4 таблицы (uid_1, others fields), (uid, uid_1, others fields), (uid, uid_1, others fields), (uid, uid_1, others fields). uid_1 - это внешний ключ к первой таблице. Нужен скрипт, который проходит по 3-ем последним таблицам и

1. удаляет запись, если uid_1 в первой таблице отсутствует
2. создает запись в таблице удаленных элементов (uid, user, type, date_create), проверив не присутствует ли он там уже (uid - PK)

Проблема , в том числе, что таблицы с миллионами записей и находятся под нагрузкой 1000-3000 CRUD-операций в минуту. Простой 'SELECT uid_1 FROM table_1' в Management Studio делается около 2-х минут и стопорит весь MS SQL (процессор уходит в 100%). Индексы по uid-полям присутствуют. Планирую такой скрипт разместить в джобе MS SQL.
11 фев 15, 12:26    [17249207]     Ответить | Цитировать Сообщить модератору
 Re: Удаление потерянных связей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20602
Не понял... как это может отсутствовать запись, если на неё имеется внешний ключ? Или имеется в виду, что это просто ссылка, которая Вами трактуется как внешний ключ, хотя на самом деле связи между таблицами нет?
11 фев 15, 12:32    [17249275]     Ответить | Цитировать Сообщить модератору
 Re: Удаление потерянных связей  [new]
Glory
Member

Откуда:
Сообщений: 104760
gepard1980
1. удаляет запись, если uid_1 в первой таблице отсутствует
2. создает запись в таблице удаленных элементов (uid, user, type, date_create), проверив не присутствует ли он там уже (uid - PK)

DELETE ... OUTPUT...
11 фев 15, 12:32    [17249276]     Ответить | Цитировать Сообщить модератору
 Re: Удаление потерянных связей  [new]
gepard1980
Member

Откуда: Ярославль
Сообщений: 244
Akina, да, просто ссылка
11 фев 15, 14:17    [17250181]     Ответить | Цитировать Сообщить модератору
 Re: Удаление потерянных связей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20602
gepard1980
Простой 'SELECT uid_1 FROM table_1' в Management Studio делается около 2-х минут и стопорит весь MS SQL (процессор уходит в 100%).
А нахрена он нужен в описанной задаче? Нужен
SELECT t2.uid_1
FROM t2 LEFT JOIN t1 ON t2.uid_1=t1.uid_1
WHERE t1.uid_1  IS NULL

а при использовании индексов (причём обращения к данным вообще не будет) он должен отрабатывать шустренько (если серверу, конечно, хватает ресурсов).
11 фев 15, 17:26    [17251659]     Ответить | Цитировать Сообщить модератору
 Re: Удаление потерянных связей  [new]
gepard1980
Member

Откуда: Ярославль
Сообщений: 244
Akina, спасибо, добрый человек, работает шустро :-)
11 фев 15, 18:03    [17251885]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить