powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить INSERT?
20 сообщений из 20, страница 1 из 1
Как ускорить INSERT?
    #39875640
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO db_to.[dbo].TextTranslates 
SELECT *
FROM db_from.[dbo].TextTranslates AS f
WHERE f.Id NOT IN (  
  SELECT [Id]   
  FROM db_to.[dbo].TextTranslates 
  )



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[TextTranslates](
	[Id] [uniqueidentifier] NOT NULL,
	[TextId] [uniqueidentifier] NOT NULL,
	[Value] [nvarchar](max) NOT NULL,
	[LangId] [uniqueidentifier] NOT NULL,
	[Deleted] [datetime] NULL,
	[Created] [datetime] NULL,
PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[TextTranslates] ADD  DEFAULT (newid()) FOR [Id]
GO

ALTER TABLE [dbo].[TextTranslates] ADD  DEFAULT (getdate()) FOR [Created]
GO

ALTER TABLE [dbo].[TextTranslates]  WITH CHECK ADD FOREIGN KEY([LangId])
REFERENCES [dbo].[Languages] ([Id])
GO

ALTER TABLE [dbo].[TextTranslates]  WITH CHECK ADD FOREIGN KEY([TextId])
REFERENCES [dbo].[Texts] ([Id])
GO
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875652
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без плана ускоряют только телепаты.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875659
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичБез плана ускоряют только телепаты.
во вложении
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875660
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
estimated execution plan
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875661
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не сканить каждый раз две таблицы, выделите базе db_from новые записи (хоть триггером в таблицу, хоть в очередь), дальше разбирайте новые записи порциями и вливайте в db_to. Непосредственно со вставкой тут мало что сделаешть, разве что поддерживать fillfactor для индекса по id регулярными редилдами.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875668
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичЧтобы не сканить каждый раз две таблицы, выделите базе db_from новые записи (хоть триггером в таблицу, хоть в очередь), дальше разбирайте новые записи порциями и вливайте в db_to.
Как-то сложно.

Может проще? Повесить rowversion, сделать индекс по rowversion include [все поля]... И каждый раз тянуть только строки старше предыдущего rowversion. Тут только последний rowversion где-то хранить надо.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875671
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЮниорПовесить rowversion, сделать индекс по rowversion include [все поля]... И каждый раз тянуть только строки старше предыдущего rowversion. Тут только последний rowversion где-то хранить надо.rowversion меняется при каждом обновлении. А ТС нужно только добавлять новые строки.
Тогда уж лучше не rowversion, а identity.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875672
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Id тип uniqueidentifier. Никакого identity...

Да, повторы будут. Но сканов всё равно будет меньше. Да и, собственно, если данные изменились, то в конечной таблице может тоже обновить надо, верно? Или в исходной данные не меняются - тогда всё отлично.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875673
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЮниорУ Id тип uniqueidentifier. Никакого identity...
Только если ещё одно поле... Ну можно, конечно, но rowversion функциональнее: с ним при необходимости изменения можно отследить.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875675
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЮниорМожет проще? Повесить rowversion...Тут только последний rowversion где-то хранить надо.1. Как будете гарантировать отсутствие выпадения строк таблицы-источника из последующих синхронизаций?
2. Как быть, если после последней синхронизации в целевой таблице некоторые строки были удалены?
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875676
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview,

Для начала, если допустимо блокировать таблицу
Код: sql
1.
INSERT INTO db_to.[dbo].TextTranslates with (tablock)



И план актуальный покажите.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875678
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЮниорУ Id тип uniqueidentifier. Никакого identity...Да, разве я говорил про другое???
Андрей ЮниорТолько если ещё одно поле... Ну можно, конечно, но rowversion функциональнее: с ним при необходимости изменения можно отследить.Отслеживать изменения противоречит задаче ТС. Будут ложные срабатывания.
Можно сделать и datetime, но это вызовет некоторые технические сложности.
invm2. Как быть, если после последней синхронизации в целевой таблице некоторые строки были удалены?У ТС нет задачи синхронизации таблиц.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875679
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm1. Как будете гарантировать отсутствие выпадения строк таблицы-источника из последующих синхронизаций?
2. Как быть, если после последней синхронизации в целевой таблице некоторые строки были удалены?
Насколько вижу я, автора эти моменты не интересуют. Меня тем более


Вопрос про конкретную вставку, которая медленно ищет новые строки. Я предложил решение уменьшить время поиска новых сток.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875905
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятная дискуссия, автору надо изменить формулу кластерного индекса на IGNORE_DUP_KEY = ON и вставлять без фильтра в запросе.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875918
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

И каждый раз вливать всю db_from.[dbo].TextTranslates в db_to.[dbo].TextTranslates ?
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875926
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

может это небольшая таблица, кто знает. И как она пополняется - неизвестно.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39875967
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовГавриленко Сергей Алексеевич,

может это небольшая таблица, кто знает. И как она пополняется - неизвестно.

Что гадать, в плане есть оценка:

- из db_to вынимается 1млн. 264тыс записей размером 26М

- из db_from поднимается почти 600 тыс записей размером 2.2Г

- все это для того, что бы найти ОДНУ запись в db_from в 4К, которую добавить в db_to.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39876136
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовавтору надо изменить формулу кластерного индекса на IGNORE_DUP_KEY = ON и вставлять без фильтра в запросе.1. Т.е. вы уверены, что отсутствие ошибок в местах, где они раньше были, никак не скажется на работе системы?
2. Производительность данной "формулы" очень сильно зависит от объема добавляемых данных и количества дубликатов в них.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39876145
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

дык есть только один способ узнать - приемлемое будет время вставки или нет. Да, логика может пострадать, а может и не пострадать. Автор сам пусть решает. Он даже не четверть задачи описал, а вырвал какой-то фрагмент из контекста. Поэтому мое предложение ничуть не хуже остальных. Иному серверу выполнить слияние в 600к записей - как чихнуть, а иной задумается.
...
Рейтинг: 0 / 0
Как ускорить INSERT?
    #39876181
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview,

используйте sequential ID , а ещё лучше INT (BIGINT если очень много).


INSERT INTO db_to.[dbo].TextTranslates WITH (TABLOCK)
SELECT *
FROM db_from.[dbo].TextTranslates AS f
WHERE f.Id NOT IN
(
SELECT [Id]
FROM db_to.[dbo].TextTranslates
)
ORDER BY f.ID
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить INSERT?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]