Быстрое чтение таблицы базы данных Nexus

Я хочу прочитать все содержимое таблицы в память как можно быстрее. Я использую базу данных Nexus, но я мог бы использовать некоторые методы, применимые ко всем типам баз данных в Delphi.

Таблица, на которую я смотрю, содержит 60 000 записей с 20 столбцами. Так что не огромный набор данных.

Из моего профилирования я обнаружил следующее:

  • Прямой доступ к таблицам с помощью TnxTable не быстрее и не медленнее, чем при использовании SQL-запроса и "SELECT * FROM TableName"

  • Простой процесс циклического перемещения по строкам без фактического чтения или копирования каких-либо данных занимает большую часть времени.

Производительность, которую я получаю,

  • Цикл всех записей занимает 3,5 секунды
  • Перебор всех записей, считывание значений и их сохранение занимает 3,7 секунды (т.е. всего 0,2 секунды больше)

Образец моего кода

var query:TnxQuery;
begin
    query.SQL.Text:='SELECT * FROM TableName';
    query.Active:=True;

    while not query.Eof do
        query.Next;

Это займет 3,5 секунды на 60 000 строк таблицы.

Это звучит разумно? Существуют ли другие подходы, которые позволили бы мне читать данные быстрее?

В настоящее время я читаю данные с сервера на том же компьютере, но в конечном итоге это может быть с другого сервера в локальной сети.

1 ответ

Решение

Вы должны использовать режим BlockRead с таблицей Tnx для оптимальной скорости чтения:

nxTable.BlockReadOptions := [gboBlobs, gboBookmarks];
//leave out gboBlobs if you want to access blobs only as needed
//leave out gboBookmarks if no bookmark support is required

nxTable.BlockReadSize := 1024*1024; //1MB
// setting block read size performs an implicit First
// while block read mode is active only calls to Next and First are allowed for navigation
try
  while not nxTable.Eof do begin
    // do something....
    nxTable.Next;
  end;
finally
  nxTable.BlockReadSize := 0;
end;

Кроме того, если вам не нужно задавать диапазон для определенного индекса, обязательно используйте индекс последовательного доступа для максимально быстрого доступа.

Другие вопросы по тегам