![]() |
![]() |
![]() |
|
ADODB и скорость вставки... | ☑ | ||
---|---|---|---|---|
0
ДенисЧ
18.07.12
✎
11:29
|
Простой код...
стрЗАпрос = ""; Для Каждого стрНомераРазмеров из тзНомераРазмеров Цикл стрЗАпрос = стрЗапрос + "INSERT INTO #UNR values(" + стрНомераРазмеров.УникальныйНомерРазмера + ", " + Формат(стрНомераРазмеров.ИдЗаказа, "ЧГ=0") + ")" + Символы.ВК; КонецЦикла; Если НЕ ПустаяСтрока(стрЗапрос) Тогда _1с.Execute(стрЗапрос); КонецЕсли; Здесь _1с - объект типа ADODB.Connection Этот цикел и вставка занимают до 30% времени работы процедуры... Можно тут что-то ускорить? Таблица #UNR создана как CREATE TABLE #UNR (UN INTEGER, ID_ZAK INTEGER) |
|||
1
shuhard
18.07.12
✎
11:31
|
(0) можешь через рекордсет и батч попробовать - не факт, что поможет
можешь через булк грузить, но уже в обход ADODB |
|||
2
ДенисЧ
18.07.12
✎
11:33
|
плёхо... :-(
А другой вопрос :-) Есть 1с-запрос типа Выбрать Что-то ПОМЕСТИТЬ ВремТам Из Откуда-ТО Как узнать имя скуль-временной таблицы ВремТаб? Можно будет извернуться через это... Особенно плохо, что идут кроссерверные вставки... |
|||
3
fisher
18.07.12
✎
11:34
|
(0) Сколько из них занимает цикл, а сколько вставка?
|
|||
4
shuhard
18.07.12
✎
11:35
|
(2) грузи средствами сиквела, т.е. через DTS,
нафиг 1С приплетать ? |
|||
5
ДенисЧ
18.07.12
✎
11:36
|
(3) цикл - 5%, вставка - 38% по последним замерам
(4) а откуда DTS возьмёт результат 1с-запроса? :-) |
|||
6
ДенисЧ
18.07.12
✎
11:37
|
bulk тоже не проходит, как я понимаю, ибо хочет файл... А в файл я дольше писать буду :-)
|
|||
7
fisher
18.07.12
✎
11:39
|
(5) А INSERT разве вставкой только одной строки ограничен? Может, если избавиться от пакета запросов - быстрее будет?
|
|||
8
shuhard
18.07.12
✎
11:39
|
(6) зато булк не попадает в журнал транзакций, и часто выгрузить в файл и загрузить булком в сотни раз ускоряет процесс
|
|||
9
Fragster
гуру
18.07.12
✎
11:39
|
инсерт в 90% поддерживает вставку нескольких строк за раз
|
|||
10
ДенисЧ
18.07.12
✎
11:42
|
(7) Покажи примерчик...
(8) А как мне результат 1сзапроса в файл одним куском выгрузить? :-) Кроме того, у меня база и так в симпле... |
|||
11
ДенисЧ
18.07.12
✎
11:44
|
хм... Нашёл, как несколько строк вставить... Попробую сейчас...
|
|||
12
fisher
18.07.12
✎
11:45
|
(10) Ну, в MS SQL, например, есть такой вариант синтаксиса:
INSERT INTO MyBooks SELECT title_id, title, type FROM titles WHERE type = 'mod_cook' |
|||
13
Fragster
гуру
18.07.12
✎
11:45
|
(11) единственное, есть ограничение на размер запроса...
|
|||
14
ДенисЧ
18.07.12
✎
11:50
|
(12) insert select я знаю, отсюда и вопрос (2) возник...
(13) А сколько его там? |
|||
15
fisher
18.07.12
✎
11:52
|
(14) Ну дык в insert select ты же можешь извернуться через from объединение строк.
|
|||
16
Kreont
18.07.12
✎
11:52
|
где то в районе 1000 строк (ограничивается как то в кб.длины текста запроса, но я так на глаз ставлю пачками по 1000 строк и всегда влазит:)
|
|||
17
ДенисЧ
18.07.12
✎
11:54
|
хм...
IF EXISTS(SELECT ID FROM tempdb..sysobjects WHERE ID = OBJECT_ID('tempdb..#UNR', 'U')) DROP TABLE #UNR go CREATE TABLE #UNR (UN INTEGER, ID_ZAK INTEGER) go INSERT INTO #UNR values (2509117 , 610817), (2509118 , 610817), (2509119 , 610817), (2509120 , 610817) в результате.. Msg 102, Level 15, State 1, Line 2 Неправильный синтаксис около ",". Какой уровень совместимости базы ей нужен? |
|||
18
ДенисЧ
18.07.12
✎
11:54
|
(15) select from откуда я буду делать, если у меня временная 1с-таблица? :-)
|
|||
19
shuhard
18.07.12
✎
11:57
|
(18) попробуй цикл в 1С оставить как есть
писать через рекордсет, а не Insert и записывать рекордсет через UpdateBatch Do Until rstTitles.EOF If Trim(rstTitles!Type) = "self_help" Then rstTitles!Type = "psychology" End If rstTitles.MoveNext Loop rstTitles.UpdateBatch |
|||
20
Fragster
гуру
18.07.12
✎
11:58
|
(14) вроде два метра
|
|||
21
fisher
18.07.12
✎
11:59
|
(17) Через values кажись только одну строку можно вставить.
(18) select from подзапрос, динамически составленный в твоем сабжевом цикле Типа (SELECT 1, 2 UNION ALL SELECT 3, 5 UNION ALL ....) |
|||
22
Fragster
гуру
18.07.12
✎
12:01
|
а на том конце что (мсскуль, мускуль, постгре, оракля?)
|
|||
23
Fragster
гуру
18.07.12
✎
12:02
|
http://msdn.microsoft.com/ru-ru/library/ms174335.aspx говорит, что можно без селекта
|
|||
24
Fragster
гуру
18.07.12
✎
12:02
|
VALUES
Позволяет использовать один или несколько списков вставляемых значений данных. Для каждого столбца в column_list, если этот параметр указан или присутствует в таблице, должно быть одно значение. Список значений должен быть заключен в скобки. Если значения в списке идут в порядке, отличном от порядка следования столбцов в таблице, или не для каждого столбца таблицы определено значение, то необходимо использовать аргумент column_list для явного указания столбца, в котором хранится каждое входное значение. Можно использовать конструктор строк Transact-SQL (также называемый конструктором табличных значений), позволяющий указать несколько строк в одной инструкции INSERT. Этот конструктор строк состоит из одного предложения VALUES со списками из нескольких значений, заключенными в круглые скобки и разделенными запятыми. Дополнительные сведения см. в разделе Конструктор табличных значений (Transact-SQL). |
|||
25
Fragster
гуру
18.07.12
✎
12:03
|
INSERT INTO dbo.MyProducts (Name, ListPrice)
VALUES ('Helmet', 25.50), ('Wheel', 30.00), (SELECT Name, ListPrice FROM Production.Product WHERE ProductID = 720); |
|||
26
fisher
18.07.12
✎
12:07
|
(24) Тогда compatibility надо явно выше 2000 сиквела ставить. В 2000 сиквеле такой синтаксис values еще не поддерживался.
|
|||
27
Fragster
гуру
18.07.12
✎
12:09
|
(26) может там вообще mYsql
|
|||
28
fisher
18.07.12
✎
12:11
|
Чуйка, что таки MS
|
|||
29
fisher
18.07.12
✎
12:16
|
(28) + Уж больно характерная строчка
IF EXISTS(SELECT ID FROM tempdb..sysobjects WHERE ID = OBJECT_ID('tempdb..#UNR', 'U')) |
|||
30
ДенисЧ
18.07.12
✎
12:24
|
(22) mssql
|
|||
31
ДенисЧ
18.07.12
✎
12:25
|
(24) *ля...
|
|||
32
ДенисЧ
18.07.12
✎
12:25
|
буду переписывать... Перенося запросы на другой сервер :-((((
|
|||
33
ДенисЧ
18.07.12
✎
12:28
|
а переписывать много...
Всем спасибо за компанию... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |