Я выполняю большой ленивый запрос (сотни выражений) на относительно небольшом количестве строк данных. Профилируя время выполнения запроса с помощью .profile(), я вижу, что около 2,2 секунды из 2,5 секунд общего времени выполнения приходится на начальный этап оптимизации. Мой код для профилирования выглядит примерно так:
Код: Выделить всё
some_lazy_query.profile()[1]Код: Выделить всё
_opts = pl.QueryOptFlags(
predicate_pushdown = False,
projection_pushdown = False,
simplify_expression = False,
slice_pushdown = False,
comm_subplan_elim = False,
comm_subexpr_elim = False,
cluster_with_columns = False,
check_order_observe = False,
fast_projection = False,
sort_collapse = False
)
some_lazy_query.profile(optimizations=_opts)[1]
Поэтому у меня такие вопросы:
- Правильно ли я это делаю? Есть ли какие-либо другие способы сократить время оптимизации, которые я до сих пор не заметил?
- Из любопытства, что продолжает делать шаг оптимизации после отключения всех флагов?
- Есть ли у вас какие-либо другие идеи о том, как ускорить запросы, в которых накладные расходы на оптимизацию огромны по сравнению с фактическим выполнением запроса (из-за большого количества столбцов, но всего лишь нескольких строк данных)?
Я знаю, что запрос функции № 25246 в конечном итоге решит проблему для моего приложения, поскольку это позволит предварительно запустить оптимизацию, но, похоже, прогресс в этом вопросе пока незначителен, и реализация этой функции может занять месяцы или годы.