Когда «возьми 10 лучших записей» превращается в кошмар для базы данных
Запрос вида ORDER BY ... LIMIT 10 кажется одной из самых простых операций в SQL. Но в реальных системах на PostgreSQL эта задача может неожиданно превратиться в серьёзную проблему.
Команда ParadeDB показала довольно наглядный пример: простой запрос на 100-миллионной таблице выполняется примерно за 5 миллисекунд, но стоит добавить фильтр или полнотекстовый поиск — и время выполнения может вырасти до 30–37 секунд.
Это не баг и не плохая конфигурация базы. Это фундаментальное ограничение архитектуры традиционных индексов.
Разберёмся, почему это происходит и почему базы данных начинают заимствовать идеи у поисковых движков вроде Lucene.
В терминологии баз данных Top K означает:
Примеры таких запросов встречаются буквально везде:
