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

Рейтинг: 0Ответов: 1Опубликовано: 19.02.2023

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

Ответы

▲ 2

На питон можно реализовать такую штуку Но скорость выполнения может зависить еще и от самой структуры бд я знаю 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