рассмотрим следующую инструкцию pgSQL:
SELECT DISTINCT some_field
FROM some_table
WHERE some_field LIKE 'text%'
LIMIT 10;
Также учтите, что some_table состоит из нескольких миллионов записей и что some_field имеет индекс b-дерева.
Почему запрос выполняется так долго (несколько минут)? Я имею в виду, почему он не перебирает создание набора результатов, и как только он получает 10 из них, возвращает результат? Похоже, что время выполнения одинаково, независимо от того, используете ли вы «LIMIT 10» или нет.
Это правильно или я что-то упустил? Могу ли я что-нибудь сделать, чтобы вернуть первые 10 результатов и «привинтить» остальные?
ОБНОВЛЕНИЕ: если вы отбрасываете отчет, результаты возвращаются практически мгновенно. Однако я знаю, что многие из записей some_table уже довольно уникальны, и, конечно, когда я запускаю запрос без отдельного объявления, первые 10 результатов фактически уникальны. Я также исключил предложение where (исключив его как фактор). Итак, мой оригинальный вопрос все еще остается, почему он не заканчивается, как только найдено 10 совпадений?