Как увеличить скорость вставки объемных данных в таблицу ?
Привет,
Мы вставляем более 500000 строк из datatable в таблицу sql, перед использованием цикла for это занимает больше времени, и мы chnage bulk insert все еще медленный, а также выбрасывает истечение сеанса.
Так есть ли другой способ вставить в один кадр таблицу ?
Прежде чем я использую это для цикла, он занимает 30 минут и выше
For Each objDR As DataRow In datas.Rows sqlcmd.CommandText = "insert into [RRights]([RoleId],[Database],[Item Type],[Email],[Print],[Design Profile],[Check In],[Design File],[Delete/Rename File],[File Output],[Create Version],[View Version],[Reports],[Management],[ShareFile],[Annotation],[RenameAll]) values ('" & stringRoleID & "',N'" & objDR("Path") & "',N'Folder','False','False','False','False','False','False','False','False','False','False','False','False','False','False')" sqlcmd.ExecuteNonQuery() Next
Что я уже пробовал:
cmd.CommandText = "select RoleId ,Path as [Database] ,'Folder' as [Item Type] from DBFlow where ([Path] LIKE N'" & stringCabName & "\%') ORDER BY [Path] ASC" cmd.Connection = sqlcon da.SelectCommand = cmd da.Fill(datas) Dim sqlcmd As New SqlCommand sqlcmd.Connection = sqlcon Using cn As New SqlConnection(ConfigurationManager.ConnectionStrings("FTConnectionString").ToString()) cn.Open() Using copy As New SqlBulkCopy(cn) copy.ColumnMappings.Add("RoleId", "RoleId") copy.ColumnMappings.Add("Database", "Database") copy.ColumnMappings.Add("Item Type", "Item Type") copy.DestinationTableName = "RRights" copy.WriteToServer(datas) End Using cn.Close() End Using
F-ES Sitecore
Вы можете ускорить свой код, не используя конкатенацию строк, использование sqlparams, вероятно, будет таким же медленным, хотя, возможно, попробуйте построить свой SQL с помощью StingBuilder, который вы инициализируете с размером, достаточным для размещения текста.
Кроме того, вы можете удалить все индексы, ссылки, ограничения и т.д. Из таблицы перед вставкой и добавить их обратно после этого. Но в конечном счете то, что вы делаете, будет медленным, нет никакой волшебной пули, кроме покупки лучшего сервера.
Aravindba
привет, тот же код работает с базой данных 100 Гб, но теперь в этой базе данных есть 800 ГБ. так в чем же проблема ? в коде, sql или конфигурации сервера ?
Ram Nunna
Вы можете передать datatable непосредственно в базу данных.
см. ссылку ниже:
https://stackoverflow.com/questions/9075159/how-to-insert-a-data-table-into-sql-server-database-table
Aravindba
пожалуйста, прочитайте мой вопрос перед ответом, я попробовал оба, которые я уже упоминал, используя массовый запрос и одну строку за строкой также.Как у меня медлительностью.