скорость работы с таблицами

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
moshkin
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 03.12.2002 (Вт) 15:01
Откуда: Russia

скорость работы с таблицами

Сообщение moshkin » 21.07.2003 (Пн) 12:53

Читаем из текстового файла строки, обрабатываем и
заносим в таблицу (файл access 2000
.Provider = "Microsoft.Jet.OLEDB.4.0")
много записей. Много это 1 миллион 200 тысяч (примерно).
Раньше этот процесс занимал на 900 Athlone
примерно минут 40. ничего серьезно не менял (во всяком случае
в этой части кода) но теперь это все загружается в таблицу
более двух часов.
Почему?
(единственно, что приходит в голову -
по технологии каждый раз в таблицу записи добавляем,
а потом устаревшие (это данные по телефонным разговорам)
стираем/переносим в другой файл.
Не может быть так что уникальный код записи стал очень большим
ну уже более 10-15 миллионов туда затолкали) и из-за этого снизилась
скорость?)
На вский случай приведу урезанный код: если кто что подскажет по поводу
ускорения - буду очень благодарен:

While Not EOF(1)
ProgressBar1.Refresh
Line Input #1, strtemp ' строку прочитали

If CurDate >= DataStart And CurDate <= DataFinish Then
With Rst
.AddNew
!NumberWho = tmpNumberWho
!NumberWhere = tmpNumberWhere
!DataStart = tmpdataStart
!DataFinish = tmpdataFinish
!TimeStart = tmpTimeStart
!TimeFinish = tmpTimeFinish

If tmpNumberWhere <> "..." And tmpNumberWhere <> "..." Then
If tmpNumberWhere <> "..." And tmpNumberWhere <> "..." Then
TmpBoolean = True
'!Oplach = True
End If
End If
!Oplach = TmpBoolean
.Update

End With
Wend

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 21.07.2003 (Пн) 13:12

Вроде бы всё нормально написано. Если глюк в Access, то посоветовать ничего не могу. Может немного ускорить код использование не Update, а UpdateBatch каждых, например, ста записей.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.07.2003 (Пн) 15:52

Еще бы посоветовал вынести With rst за пределы цикла.
А проверить легко, создай пустую базу и попробуй загрузить в нее. Если будет нормально, то значит дело в Access. Кроме того, возможно дело в ограничениях самого файла: максимально возможный размер базы или таблицы -- 2 Гб.
Lasciate ogni speranza, voi ch'entrate.

ShadowCaster
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 24.05.2002 (Пт) 10:52

Сообщение ShadowCaster » 22.07.2003 (Вт) 1:40

2 Гб - на FAT/FAT32
unlimited - на NTFS

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.07.2003 (Вт) 9:55

ShadowCaster, я говорю не про максимальный размер файла. Почитай хелп по Access, там есть статья "Спецификации MS Access". Вот цитата оттуда:
Microsoft писал(а):
База данных Microsoft Access
Максимальные значения
    Размер файла базы данных Microsoft Access (.mdb) - 2 Гбайт за вычетом места, необходимого системным объектам.
    Число объектов в базе данных - 32 768
    Модули (включая формы и отчеты, свойство Наличие модуля (HasModule) которых имеет значение True) - 1 000
    Число знаков в имени объекта - 64
    Число знаков в пароле - 14
    Число знаков в имени пользователя или имени группы - 20
    Число одновременно работающих пользователей - 255

Таблица
Максимальные значения
    Число знаков в имени таблицы - 64
    Число знаков в имени поля - 64
    Число полей в таблице - 255
    Число открытых таблиц - 2048 (фактическое число может быть меньше из-за внутренних таблиц, открываемых Microsoft Access)
    Размер таблицы - 2 Гбайт за вычетом места, необходимого системным объектам.
    Число знаков в текстовом поле - 255
    Число знаков в поле MEMO - 65 535 при вводе данных через интерфейс пользователя;
    - 1 Гбайт для хранения знаков при программном вводе данных.
    Размер поля объекта OLE - 1 Гбайт
    Число индексов в таблице - 32
    Число полей в индексе - 10
    Число знаков в сообщении об ошибке - 255
    Число знаков в условии на значение записи - 2 048
    Число знаков в описании таблицы или поля - 255
    Число знаков в записи (кроме полей MEMO и полей объектов OLE) - 2 000
    Число знаков в значении свойства поля - 255
Lasciate ogni speranza, voi ch'entrate.

moshkin
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 03.12.2002 (Вт) 15:01
Откуда: Russia

спасибо

Сообщение moshkin » 22.07.2003 (Вт) 10:26

всем спасибо за участие,
собственно вопрос был почему могло замедлиться (резко) выполнение кода. Я пробовал даже дефрагментацию.
Спецификации access я читал, особенно про размер файла. У меня файл mdb не более 300 Mb (это если в базе 2,5 миллиона записей). А вот ограничения на количество записей я нигде не нашел. А практически (интересно просто) вот если в таблицу загнать 100 миллионов записей - она как - работать будет?
Еще раз всем спасибо.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList