powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / помогите оптимизировать sql-запрос
2 сообщений из 2, страница 1 из 1
помогите оптимизировать sql-запрос
    #37482669
enic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть такая задача:

- имеем список строк (10-30 символов) - и имеем таблицу в БД sqlite, такой структуры: int uid, string строка, int фейлы

алгоритм такой: - получили строки - внесли их в БД, uid по умолчанию null, фейлы - по умолчанию 0 - обрабатываем строки - те строки, с которыми произошла ошибка - обновляются в БД, инкрементируется счетчик фейлов - все удачно обработанные строки получают свой уникальный uid, чтобы потом их повторно не обрабатывать

таблица нужна затем, чтобы запоминать и отсеивать впоследствии те строки, у которых 5 фейлов и больше а также те, которые были обработаны ранее (имеют uid)

проблема у меня на том месте, где мы получили строки и пытаемся из них удалить те, что в базе имеют по 5 фейлов

я сделал это так:
авторselect data from rows where data in (перечисляем все строки через запятую) and fails >= 5 or uid is not null


т.е. достаем строки, которые в (перечисляем все имеющиеся в начале скрипта строки) и без ошибок, либо уже есть uid

соотв. потом из начального списка удаляем весь этот мусор а оставшиеся обрабатываем

1 список строк в запросе порой получается огромным 2 это неистово жрет память (python3, apache, sqlite3)

как по вашему будет правильнее удалить из начального списка все строки, имеющие фейлы и имеющие ИД, так чтобы не доставать всю таблицу (она может содержать миллионы строк)?

можно проверять каждую строку отдельным запросом, но не сожрет ли это все ресурсы?
...
Рейтинг: 0 / 0
помогите оптимизировать sql-запрос
    #37485770
AlexIljin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
enicкак по вашему будет правильнее удалить из начального списка все строки, имеющие фейлы и имеющие ИД, так чтобы не доставать всю таблицу (она может содержать миллионы строк)?Я бы поменял порядок предикатов в запросе, поставив простейшие на первый план. Не знаю, пытается ли SQLite оптимизировать запросы. Если он просто выполняет проверки слева направо, то до наиболее трудоёмкой части (data in (...)) должен доходить уже максимально отфильтрованный набор строк.

select data from rows where (uid is not null or fails >= 5) and data in (перечисляем все строки через запятую)

Проверять все строки отдельными запросами вряд ли будет лучше с точки зрения производительности.
Не знаю, на что у вас там сжирается память, БД тут вряд ли играет роль. Смотрите, что у вас в Питоне творится.

Вопрос: data == primary key? Наверное, имеет смысл сделать индекс.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / помогите оптимизировать sql-запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]