Hacker News Digest

19 августа 2025 г. в 15:43 • readyset.io • ⭐ 112 • 💬 49

OriginalHN

#index-condition-pushdown#query-optimization#database-performance#rocksdb#mysql#postgresql#readyset#hash-join#sql

450× Faster Joins with Index Condition Pushdown

Проблема
При промахе кэша Readyset выполняет запрос с нуля. Для «расколотых» соединений (предикаты есть и в WHERE, и в ON) старый hash-join читал обе таблицы полностью:

  • фильтр по email возвращал 1 строку users;
  • фильтр по status='SHIPPED' — 99 % таблицы orders.
    Материализовав миллионы лишних строк, система строила хэш-таблицу и лишь потом отбрасывала ненужное. Профилирование показало: 30 % времени уходило на распаковку RocksDB, затем на 10 K IOPS и 81 % загрузки NVMe.

Решение: Index Condition Pushdown
Новый план использует индексы и «проталкивает» условия вниз:

  1. Сначала выбираем 1 строку users по индексу email.
  2. Для каждой найденной u.id делаем индексный lookup в orders с условием user_id = u.id AND status='SHIPPED'.
    Так читаются только нужные строки orders, объём I/O падает на порядки, а хэш-таблица больше не строится.

Результат
ICP устраняет лишнее чтение и распаковку, превращая холодный straddled-join из многомиллисекундной операции в субмиллисекундную.