Как последовательно читать записи из большой SQL таблицы?

Есть очень большая, больше 400 млн. записей, таблица, содержащая три поля типа VARCHAR 100 каждое. Как из такой таблицы последовательно, т.е. одну запись за одно подключение и за один запрос к базе, читать данные? При этом создавать дополнительный столбец с номерами нельзя. В таблице могут присутствовать одинаковые записи. Желательно, чтобы запросы выполнялись очень быстро. (Вроде бы - это же простая операция - просто прочитать одну запись). Может быть в SQL есть какая-то неявная нумерация записей? Если мы прочитали запись, как прочитать предыдущую или следующую? База - Firebird 2.5.9.


Ответы (1 шт):

Автор решения: Aleksandr Fetisov

На питон можно реализовать такую штуку Но скорость выполнения может зависить еще и от самой структуры бд я знаю 3 способа для такого или же можно использовать сортировку слияния

import pyodbc

conn = pyodbc.connect('DRIVER={Firebird};HOST=<hostname>;DATABASE=<database_name>;UID=<user_id>;PWD=<password>')
cursor = conn.cursor()
cursor.execute('SELECT * FROM <table_name>')
row = cursor.fetchone()
while row:
    # обрабатываем строку, например, выводим содержимое полей на экран
    print(row[0], row[1], row[2])
    row = cursor.fetchone()
import pyodbc

conn = pyodbc.connect('DRIVER={Firebird};HOST=<hostname>;DATABASE=<database_name>;UID=<user_id>;PWD=<password>')
cursor = conn.cursor()
cursor.execute('SELECT * FROM <table_name>')
row = cursor.fetchone()
cursor.scroll(-1, 'relative')  # перемещаем курсор на последнюю строку
while row:
    # обрабатываем строку, например, выводим содержимое полей на экран
    print(row[0], row[1], row[2])
    row = cursor.fetchone()
    cursor.scroll(-2, 'relative')  # перемещаем курсор на предыдущую строку
import fdb

# Установка параметров подключения
dsn = 'localhost:/path/to/database.fdb'
user = 'username'
password = 'password'

# Подключение к базе данных
conn = fdb.connect(dsn=dsn, user=user, password=password)
cursor = conn.cursor()

# Выполнение запроса и получение первой записи
cursor.execute('SELECT column1, column2, column3 FROM table_name')
row = cursor.fetchone()

while row is not None:
    # Обработка данных
    print(row[0], row[1], row[2])
    
    # Получение следующей записи
    row = cursor.fetchone()

# Закрытие подключения
cursor.close()
conn.close()

Так же последовательно читать записи из таблицы можно использовать операторы ORDER BY и LIMIT

→ Ссылка