|
Выгрузка из sql большого числа записей. | ☑ | ||
---|---|---|---|---|
0
Сергиус
21.10.11
✎
12:47
|
Нужно выгрузить данные напрямую из базы sql(число записей порядка 2.000.000). Делаю таким образом:
Cmd = New COMОбъект("ADODB.Command"); Cmd.ActiveConnection = Соединение; Cmd.CommandText = "Select * from Prices"; ФайлДляВыгрузки = Новый ТекстовыйДокумент; Выборка = Cmd.Execute(); Пока НЕ Выборка.EoF цикл ФайлДляВыгрузки.ДобавитьСтроку(<Здесь данные из выборки добавляю>); Выборка.MoveNext(); КонецЦикла; ФайлДляВыгрузки.Записать(ИмяФайла,КодировкаТекста.ANSI); На мощном сервере все это занимает более 8 часов..Вот думаю, каким образом можно все это убыстрить, куда копать? |
|||
1
mikecool
21.10.11
✎
12:48
|
скуль сам может сохранять выборку в файлы, делает достаточно быстро
|
|||
2
mikecool
21.10.11
✎
12:48
|
ТекстовыйДокумент тормоз еще тот
|
|||
3
shuhard
21.10.11
✎
12:50
|
(0) открываешь BOL
вкуриваешь DTS настраиваешь |
|||
4
shuhard
21.10.11
✎
12:52
|
(3) + 1
целевой форум здесь: sql.ru |
|||
5
izekia
21.10.11
✎
12:58
|
(2) +1 лучше к строке прибавлять
|
|||
6
izekia
21.10.11
✎
13:00
|
+(5) или еще лучше последовательная запись текста, все равно в файл
|
|||
7
rs_trade
21.10.11
✎
13:01
|
(0) если разовая выгрузка, запусти из скуля экспорт
|
|||
8
shuhard
21.10.11
✎
13:02
|
(7) да и не разовую автоматизировать средствами сиквела не вопрос
|
|||
9
rs_trade
21.10.11
✎
13:03
|
(8) DTS сильно быстро не вкуришь.
|
|||
10
H A D G E H O G s
21.10.11
✎
13:06
|
ЗаписьТекста
|
|||
11
H A D G E H O G s
21.10.11
✎
13:06
|
На пару порядков быстрее
|
|||
12
Сергиус
21.10.11
✎
13:07
|
(6)т.е. лучше использовать ЗаписьТекста чем ТекстовыйДокумент?
реально быстрее будет? Напрямую из sql не получится выгрузить..эти данные еще необходимо долнить кое-чем из базы 1с.. |
|||
13
Сергиус
21.10.11
✎
13:09
|
(10) будем пробовать..
А как считаешь - лучше сделать выборку из sql,последовательно ее перебрать, обрабатывая данными 1с или же выгрузить из sql в какой то файл, и уже по нему проходится циклом? |
|||
14
shuhard
21.10.11
✎
13:10
|
(13) лучше всего загрузить на сиквел нужные данные, связать запросом и выгрузить средствами SQL
|
|||
15
ptiz
21.10.11
✎
13:12
|
(12) Быстрее - зуб даю!
|
|||
16
ptiz
21.10.11
✎
13:13
|
Ты бы и сам понял причину, если бы вставил в статус счетчик строк.
|
|||
17
Сергиус
21.10.11
✎
13:15
|
(16)не очень понял, пояснишь?
|
|||
18
ptiz
21.10.11
✎
13:17
|
(17) Он бы увидел, что сначала выгрузка идет быстро, а потом резко замедляется.
|
|||
19
izekia
21.10.11
✎
13:20
|
(17) угу, текстовый документ - это совсем не стрингбилдер ... он так же прибавляет к строке, и соответственно просто копирует эту строку постоянно
|
|||
20
H A D G E H O G s
21.10.11
✎
13:23
|
ТекстовыйДокумент - копит строку и постоянно перераспределяет ее в блоках память (все время надо больший блок). Это дико медленно.
Проще постоянно сбрасывать на диск через ЗаписьТекста, с учетом кэша диска и кэша записи винды (а есть ли он?) это быстрее. |
|||
21
H A D G E H O G s
21.10.11
✎
13:24
|
||||
22
Сергиус
21.10.11
✎
13:40
|
А как Выборку из ADODB запихнуть в какой то файл?
В строке запроса как то явно указать? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |