#0
by arsik
Составил запрос. На удаление с использованием временной таблицы. Но как этой временной таблице добавить индекс?
#4
by arsik
>>uid-ы могут совпадать Ну там не очень важная таблица, если пару лишних строк удалится ничего страшного нет. >>забыли про смещение дат В базе 0 смещение, так что ничего страшного я думаю.
#6
by arsik
Посмотрел. Я изначально просто выбрал документы, допустим за сегодня, нормально. Только сегодняшние выбрались.
#9
by arsik
ХЗ. Так в 1С обычно принято. :) Еще индекс можно построить по временной. Вроде как быстрее должно быть.
#11
by Naf_kultura
DELETE FROM _InfoReg4206 WHERE (_Fld4207_RRRef NOT IN (SELECT _IDRRef FROM _Document9915 WHERE (_Date_Time >= @datevar) UNION ALL SELECT _IDRRef FROM _Document106 WHERE (_Date_Time >= @datevar) ))
#13
by arsik
Спорно. Почему то во всех мануалах (по 1С) советуют использовать временные с индексами. Даже если они 1 раз используются.
#15
by arsik
SELECT происходит быстро, а вот DELETE - уже час шуршит. Таблица исходная из которой нужно удалить очень большая (250 миллионов записей). Временная вышла около 3 миллионов. Как ускорить DELETE?
#16
by Naf_kultura
если ты почти всю ее удаляешь, то бишь оставляешь 3 из 250 миллионов, то не проще было создать другую таблицу. Туда перенести нужные данные INSERT. Старую грохнуть DROP. Новую переименовать
#17
by arsik
Была такая мысль но моего опыта не хватит, что бы пересоздать таблицу. Там же еще и индексы нужно создать.
#20
by youalex
DECLARE @docs table(UIDs binary) - это не временная таблица, а табличная переменная. Непонятно, зачем она вообще: [1c] DELETE reg FROM _InfoReg4206 reg JOIN _Document9915 doc ON reg._RecorderRRef = doc._IDRRef WHERE doc._Date_Time >= @datevar --AND reg._RecorderTRef = 0x00000105 /*это условие луше указать, чтобы в индекс попасть, значение можно в профайлере узнать*/ [/1c] И для второй таблицы доков - аналогично.
#23
by Yuri 83
Тем не менее правильно товарищ в говорит... Времени разобраться плюс время выполнить все равно будет меньше, чем вот так, в лоб удалять. Можно еще просто создать копию таблицы с нужными данными (можно мастером накликать код, если сложно), затем truncate table очистит полностью исходную, потом обратно скопировать данные. Будет быстрее гораздо. Только права на truncate должны быть
#25
by youalex
можно через временную: BEGIN TRAN BEGIN TRY 1) SELECT INTO #temp SELECT ... 2) TRUNCATE TABLE Reg 3) INSERT INTO Reg SELECT * FROM #temp END TRY BEGIN CATCH SELECT ERROR_MESSAGE ROLLBACK TRAN END CATCH IF @@TRANCOUNT > 0 COMMIT TRAN SELECT @@TRANCOUNT -- должно быть 0 !!
#28
by arsik
Спасибо большое. Все получилось. Сократилось до 7 минут. У меня еще вопрос. После инсерта нужно переиндексацию, (перестроение, реорганизацию) индексов этой таблицы делать или sql сам все автоматом сделает?
#31
by arsik
Оказалось все не так просто. На тестовой базе все нормально, на рабочей ошибка: Поиск по этим полям показал, что запись все же уникальна. Я так полагаю, что просто во время выполнения запроса в эту таблицу вносятся изменения из 1С. Как заблокировать на уровне SQL таблицу на время выполнения всего скрипта? Пример скрипта тут:
#35
by arsik
Не пойдет. Там постоянно кроме юзеров еще и автообмены. Ну и выгонять юзеров долго. У меня сначала идет TRUNCATE, потом INSERT. Между этими двумя строками может пролезть INSERT от 1С? Правильно так?
#37
by Oftan_Idy
Вот лезут такие грязными ручками в SQL, а потом базы падают. Начерта это делать напрямую? Почему не через платформу?
#40
by arsik
Не. Создали тут умельцы свой регистр. Только очистку тупую сделали. 100 т. записей в день удаляется, посредством 1С, а прирастает больше. Иногда намного больше, это когда перепроведения всякие. Сейчас накопилось 270 миллионов записей, из них актуальны только 13 миллионов.
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Посоветуйте что использовать для запросов на T-SQL
- Как правильно удалить строку в форме списка справочника?
- Правильно удалить пользователя из ТиС v7
- Как показать часть отчета, пока другая часть формируется? :)
- Как скрыть или удалить столбец в таблице?
- Нужно удалить записи регистра сведений "Удалить права доступа пользователей"
- Как перенести табличную часть справочника в табличную часть документа?
- Как в Excel поставить/удалить группировку по некоторым строкам, и удалить по другим
- Как правильно удалить базу из 1CV8Reg.lst
- T-SQL: Путь к последнему бэкапу
- v7: Как правильно удалить строки таблицы значений
- Как правильно удалить подсистему и все ее объекты из конфигурации
В этой группе 1С
- СКД вычисляемые поля.
- Не фиксируются запросы в ЦУП
- Групповая(пакетная) печать документов
- БП 3.0 Страховые взносы на иностранных граждан
- Два исполнительных листа на одного сотрудника ЗУП 2.5, 3.0
- Ноутбук сам выходит из режима сна.
- Снятие с поддержки 1С Бухгалтерия КОРП 2.0
- 1С Документооборот 2.1 Основной предмет в процессах
- Справочник «Шаблоны этикеток и ценников». Добавление макета шаблона этикетки
- закрытие месяца в упп рауз
- КД: ПоследовательностьПолейПоиска, не создается новый объект
- v7: КАМИН:Расчет заработной платы. Версия 2.0 ПРОФ "Свод отчислений и сборов"
- V83.COMConnector
- БП 2.0 Сторнирование НДС предыдущего квартала в книге продаж
- БП 3.0 не закрывается 20 счет.
- Односторонний обмен РИБ
- Интерфейс 1С 8 стандартные действия
- 1С Веб клиент локальный ключ
- Как выгрузить dll COM компоненты из памяти процесса?
- Создание документа Операция в БП 3.0