- Какой механизм базы данных вы используете (Oracle, SQL Server, MySQL и т. Д.)?
- Можете ли вы опубликовать план запроса для обоих запросов?
Похоже, оптимизатор, который использует ваша база данных, выбрал очень плохой план выполнения для первого запроса. Предполагая, что ядро вашей базы данных использует какой-то оптимизатор на основе затрат (большинство крупных поставщиков), это обычно означает, что предположение оптимизатора относительно количества возвращаемых строк было совершенно неверным. Скорее всего, его оценки одинаково неверны, независимо от того, указаны ли 15 или 45 уникальных значений, но бывает, что утроение неверной оценки приводит оптимизатора к мысли, что другой план запроса будет уместным. Как правило, это означает, что информация, которую вы дали оптимизатору в терминах статистики по таблице A, неверна и требует исправления.
Как говорится, насколько большой стол A
? Если вы действительно запрашиваете из одной таблицы, у оптимизатора есть относительно немного вариантов для рассмотрения. На самом деле нужно только выбрать между полным сканированием таблицы на A и использованием индекса на Field3
. Даже если он решит выполнить сканирование таблицы, а не использовать индекс для Field3
, ни в коем случае не потребуется 9 часов для сканирования одной таблицы, исключая действительно исключительные обстоятельства, когда таблица A
измеряется как минимум сотнями ГБ и аппаратное обеспечение относительно пешеходные.