На большой таблице events запрос SELECT * FROM events ORDER BY created_at DESC LIMIT 100 неожиданно работает быстро. Какое объяснение наиболее вероятно при наличии индекса по created_at?

AПлан может пройти Index Scan по индексу на created_at и взять первые строки без отдельного шага Sort
BНаличие LIMIT 100 отключает сортировку в плане, поэтому ORDER BY фактически не влияет на стоимость запроса
CОператор ORDER BY в таких запросах игнорируется оптимизатором, если в таблице нет полей с уникальным значением
DПланировщик всегда использует хэш-агрегацию, когда в запросе одновременно встречаются ORDER BY и LIMIT
Правильный ответ. Связка ORDER BY и LIMIT часто ускоряется индексом по полю сортировки.

Разбор

Если есть подходящий индекс по created_at, планировщик может читать строки уже в нужном порядке и остановиться после LIMIT 100. Тогда дорогая операция Sort не нужна или становится значительно дешевле. Поэтому одинаковый запрос без индекса может быть на порядки медленнее.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

Ещё вопросы по теме «EXPLAIN и оптимизация»