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

Откуда:
Сообщений: 126
Разъясните такую ситуацию.

Вывожу дельту:

Есть таблицы tmpTable1, preTable1 и Table1

В процедуре наполняю tmpTable1 новыми данными.
Затем сверяю tmpTable1 и preTable1 для выявления дельты, и записываю результат в Table1.

Неудобство в том что нужно вести 3 структуры параллельно.
Попробовал уйти от этого и сделал одну таблицу Table1 с полем TYP (PRE,TMP)

Но резко увеличилось время вычисления дельты.
Я так понимаю это из-за того что чтение и запись происходит в одной таблице.
Есть ли какие-нибудь альтернативные компромиссные решения?

Индексы на поле TYP конечно помогли, но всё равно время дольше!

Пример вычисления дельты:
INSERT INTO Table1 (ID,[somecols...],systyp,syshash)
SELECT ID
	,[somecols...]
	,'add' as 'systyp'
	,syshash
	FROM Table1 
	WHERE systyp = 'TMP' and ID not in (select ID from Table1 where systyp = 'PRE')
UNION
SELECT tmp.ID
	,tmp.[somecols...]
	,'cng' as 'systyp'
	,tmp.syshash
	FROM Table1 tmp
	JOIN Table1 pre ON pre.systyp='PRE' and tmp.id = pre.id and tmp.syshash != pre.syshash
	WHERE tmp.systyp='TMP'
UNION
SELECT ID
	,[somecols...]
	,'del' as 'systyp'
	,syshash
	FROM Table1
	WHERE systyp='PRE' and ID not in (select id from Table1 where systyp='TMP')
;


P.S. syshash это поле вычисляемое заранее где делается MD5 от всех нужных полей для сверки изменений
27 апр 12, 17:27    [12481606]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Я так понимаю это из-за того что чтение и запись происходит в одной таблице.

Только они не происходят параллельно.

Wrun
Есть ли какие-нибудь альтернативные компромиссные решения?

Задачу нормально поставьте.
27 апр 12, 17:32    [12481633]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory,

Задача в том как увеличить производительность не уходя обратно к ведению трех таблиц
27 апр 12, 17:38    [12481669]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Задача в том как увеличить производительность не уходя обратно к ведению трех таблиц

Это цель.
А не постановка задачи.
27 апр 12, 17:39    [12481677]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Wrun
UNION
Просто union без all - это еще и distinct для всех ваших данных. Изначально никаких дистинктов не было, так что и тут они вам скорее всего не нужны.

Сообщение было отредактировано: 27 апр 12, 17:50
27 апр 12, 17:50    [12481740]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory,

Хорошо, глобально Задача найти дельту из сегодняшних и вчерашних данных.

На данный момент происходит так:

1) Сегодняшние данные набираются из множества таблиц в TMP.
2) Происходит сверка сегодняшних и вчерашних данных и выявление дельты и запись ее.
3) После сверки TMP переносится в PRE (вчерашние).
27 апр 12, 17:54    [12481765]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Хорошо, глобально Задача найти дельту из сегодняшних и вчерашних данных.

И где так учат делаить постановки ?
https://www.sql.ru/forum/actualthread.aspx?tid=127456 п.4 и п.6
27 апр 12, 18:00    [12481790]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory,

Если не знаешь как ответить то не надо и выпендриваться
27 апр 12, 18:03    [12481805]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Если не знаешь как ответить то не надо и выпендриваться

Если ваш словарный запас беден для нормального объяснения, то пойдите умных книжек почитайте.
27 апр 12, 18:04    [12481817]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory,

Зачем разглагольствовать ?

Я описал что Было и что изменилось, и спросил конкретно помочь Оптимизировать...
Какая разница как я наполняю эти таблицы, и какими данными?
Версия SQL сервера для меня не критична!
27 апр 12, 18:06    [12481824]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Я описал что Было и что изменилось, и спросил конкретно помочь
Какая разница как я наполняю эти таблицы, и какими данными?
Версия SQL сервера для меня не критична!


Тогда вот вам решение

Select DELTA From Vcherashnie_dannye and Segodnjashnie_dannye

Сообщение было отредактировано: 27 апр 12, 18:13
27 апр 12, 18:09    [12481845]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Wrun
Зачем разглагольствовать ?
Вот именно, зачем? Темы таких воинственных разглагольствующих просто закрываются, а в запущенных случаях сами они банятся, да и все.
27 апр 12, 18:11    [12481853]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory,

умно!
27 апр 12, 18:11    [12481860]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Glory,

умно!

Зато полностью соответствует вашему описанию:
- синтаксис не важен
- таблицы не важны
- выбираит дельту
27 апр 12, 18:14    [12481881]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory,

Синтаксис указан разделом.
Если предложение обработать внешним продуктом, то наверно стоит указать каким

Таблицы естественно изменены и не критичны.

Ваш код не работает, читайте BOL
27 апр 12, 18:18    [12481904]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Ваш код не работает, читайте BOL

У меня работает. Только "Какая разница как я наполняю эти таблицы, и какими данными? "
И ваша "Версия SQL сервера для меня не критична! "
27 апр 12, 18:22    [12481917]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
2Wrun.

Своим партизанством вы сами себе осложняете жизнь. Никто не будет угадывать вашу структуру даных, задачу, еще и версию сервера в придачу. Не интересно как-то. Не хотите помогать себе сами, то и вам вряд ли кто захочет помогать. В общем, хозяин-барин.
27 апр 12, 18:22    [12481925]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Гавриленко Сергей Алексеевич,

О какой структуре данных идет речь? вы хотите знать правильное название таблиц и полей?

Если будет предложено решение на SQL 2012 - установлю его и буду проверять, поэтому не критично!

Вопрос вполне конкретный, сделал из 3х таблиц одну - стало хуже - Как оптимизировать?

Может влияют блокировки, сам уже нашел что рекомендовано вовсе отказаться от UNION и переписать на FULL JOIN.

Может есть еще предложения? Если упустил какие-то данные, извиняюсь - спросите, с радостью отвечу!

Спасибо за уделенное время и ответы по-существу!
27 апр 12, 18:27    [12481944]     Ответить | Цитировать Сообщить модератору
 Re: Вставка и чтение данных в одной таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wrun
Может есть еще предложения? Если упустил какие-то данные, извиняюсь - спросите, с радостью отвечу!

Модератор: Когда созрете для нормальной постановки задачи, то создатие новую тему
27 апр 12, 18:29    [12481950]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить