TGViewer
PPC для сверхразумов | Александр Хитро PPC для сверхразумов | Александр Хитро @ppc_bigbrain · 3.88K subscribers
Post #1719 912
Сортировка — смерть производительности. Часть 1.

Предыдущие посты серии:

1. Документация по промптам.
2. Выбор нейронок.
3. Подготовка к разработке.
4. Оптимизация кода.
5. Если код не "летает".
6. Минимизируем вычисления.
7. Фатальный пример вычислений.
8. Порядок обработки данных.


В Power Query функции сортировки Table.Sort, List.Sort — одни из самых "дорогих" операций.

❌ Имеют вычислительную сложность O(n log n).
❌ Прерывают потоковую обработку данных.
❌ Ломают ленивые вычисления.
❌ Заставляют систему загружать все данные в оперативную память.
❌ При использовании в циклах быстро превращаются в вычислительную сложность O(n²) и хуже.
❌ Часто ломают Query Folding (свертывание запросов) — относится только к SQL запросам, а не к лежащим на ПК файлам.

Эксперты BI индустрии сортировку используют только в крайних случаях.

————

Категоризация альтернатив сортировке.

Ниже перечислены функции, которые выполняют задачи поиска и отбора данных быстрее, чем сортировка.

1️⃣ Функции поиска экстремумов (максимума/минимума) для таблиц — сложность O(n).

Вместо упорядочивания всего списка ради одного значения используются агрегатные функции.

⚫️ Table.Max — поиск строки с максимальным значением по столбцу.
Сложность: O(n).
Применение: Вместо Table.Sort + Table.First. Например, чтобы не оставлять только одну строку с максимальным расходом для каждой рекламной кампании, где сложность — O(n²) или O(n log n).

⚫️ Table.Min — поиск строки с минимальным значением по столбцу.
Сложность: O(n).
Применение: Вместо Table.Sort + Table.First

————

2️⃣ Получение элементов списка по позиции — сложность O(1).

Если данные уже имеют структуру, сортировка не нужна.

⚫️ List.First — первый элемент списка.
Сложность: O(1). Мгновенное взятие первого элемента.
Применение: Быстрый доступ к началу списка.

⚫️ List.Last — последний элемент списка.
Сложность: O(1).
Применение: Быстрый доступ к концу списка.

————

3️⃣ Топ-N без полной сортировки списка

⚫️ List.MaxN — N максимальных элементов из списка.
Сложность: O(n × k).
Применение: Частичная сортировка для топ-элементов.

⚫️ List.MinN — N минимальных элементов из списка.
Сложность: O(n × k).
Применение: Поиск топ-элементов.

⚫️ List.FirstN — первые N элементов.
Сложность: O(n).
Применение: Срез данных с начала.

⚫️ List.LastN — последние N элементов.
Сложность: O(n).
Применение: Срез данных с конца.

————

4️⃣ Получение элементов таблицы по позиции.

Если данные уже имеют структуру, сортировка не нужна.

⚫️ Table.First — первая строка таблицы.
Сложность: O(1).
Применение: Получение первой строки без сортировки.

⚫️ Table.Last — последняя строка таблицы.
Сложность: O(1).
Применение: Последняя строка без сортировки.

⚫️ Table.FirstN — первые N строк таблицы.
Сложность: O(n).
Применение: Выборка строк с начала.

⚫️ Table.LastN — последние N строк таблицы.
Сложность: O(n).
Применение: Выборка строк с конца.

————

5️⃣ Топ-N без полной сортировки таблицы

⚫️ Table.MaxN — поиск N строк с наибольшими значениями.
Сложность: O(n × k), где k — количество элементов (обычно k << n). На практике близко к O(n).
Применение: Топ-N элементов без полной сортировки.

⚫️ Table.MinN — поиск N строк с наименьшими значениями.
Сложность: O(n × k).
Применение: Поиск нижних N элементов.
Используется вместо: Sort + FirstN.

————

6️⃣ Группировка и агрегация — O(n) или O(n + g).

⚫️ Table.Group с вложенными функциями агрегации List.Max, List.Sum, List.Average, List.Count в группируемых полях.
Сложность: O(n) для группировки + O(g) для агрегации, где g — количество групп.
Применение:
— За один проход группирует данные с агрегацией.
— Самый мощный инструмент для замены сортировки.
— Cокращает объем данных при работе с группами.
— Ищет "лучшую" строку в группе без внутренней сортировки.
— Не замедляет обработку папки с файлами до сложности O(n²).

⚫️ List.Accumulate — пользовательская агрегация.
Сложность: O(n) при O(1) операции в функции.
Применение: Сложные агрегации без сортировки.

В следующем посте — больше альтернатив сортировке: агрегация, фильтрация и поиск, индексация и lookup, join.

via @ppc_bigbrain
More from @ppc_bigbrain
  1. Jun 3, 2026эмэйзинг нейродрисня когда пытаешься вправить нейтронке мозги из задницы в процессор, созд…
  2. May 27, 2026ну и чё теперь делать? а ведь был шанс via @ppc_bigbrain
  3. May 23, 2026маркетологи, как вам портрет платежеспособной аудитории? сохраняем или осуждаем? via @ppc_…
  4. May 21, 2026Что вы попробовали в своей карьере из любых родов деятельности один раз и сразу поняли, чт…
  5. May 20, 2026шта? абисните плес, я прост с деревни шёл 8к26 век, впнологи щщщетали цену клика калкурент…
  6. May 14, 2026«а мы агентство, которое скликивает рекламу по заказу яндекса» кулстори от того, кто умеет…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →