Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Производительность SQL Alchemy

Автор вопроса: BogdanОтветов: 2

Я работаю над проектом, которому потребуется огромная база данных. В настоящее время мы используем SQLAlchemy, но меня немного беспокоят проблемы с производительностью. Мой вопрос в том, что у меня есть запрос вроде:

session.query(DataStorage).filter(DataStorage.storage_path.startswith(path)).all()

Как SQLAlchemy выполняет фактический перевод и фильтрацию. Получает ли он все записи из DataStorage с предложением SELECT, а затем проверяет их всех? Или он знает, как перевести "фильтр (DataStorage.storage_path.startswith (путь))" в SQL? Насколько теряется производительность при использовании собственных SQL-запросов?

с уважением, Богдан

pythonsqlalchemy

Ответы

Ответ 1 · рейтинг 2 · Rick

SqlAlchemy использует ваш код для создания оператора SQL. В вашем случае вы делаете что-то вроде:

SELECT * FROM DataStorage WHERE DataStorage.storage_path LIKE 'path%';

Запрос выполняется для базы данных после использования .all(). Таким образом, в этом случае он получит все строки в итераторе набора результатов и вернет их вам.

Ответ 2 · рейтинг 1 · Michael Mior

Я не знаком с конкретными конструкциями SQLAlchemy, которые вы используете, но лучший способ узнать это - попробовать. Включите ведение журнала запросов в MySQL и проверьте запросы, которые генерирует SQLAlchemy. Вы можете попробовать написать запрос вручную и сравнить их производительность. (Для этого вам понадобится куча тестовых данных в вашей базе данных.)

Как правило, ORM прекрасно справляются с простыми SELECT, предложениями WHERE, ORDER BY и т. д. Когда вы начинаете выполнять много объединений или много обрабатывать данные, построенные запросы становятся менее оптимальными. Это специфично для вашего приложения. Подход, который я обычно использую, заключается в том, чтобы записывать вещи, используя ORM, а затем оптимизировать и заменять SQL, где это необходимо.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы