Контекст: SQL Server 2008. Есть 2 таблицы для внутреннего объединения.Таблица фактов, содержащая 40 миллионов строк, содержит ключ пациента, вводимые лекарства и другие факты.Существует уникальный индекс (некластеризованный) для ключа лекарства и ключа пациента, объединенный в этом порядке.Таблица измерений - это список лекарств (70 строк).Присоединение состоит в том, чтобы получить код лекарства (бизнес-код), основанный на ключе лекарства (суррогатный ключ).Запрос:
SELECT a.PKey, a.SomeFact, b.MCode
FROM tblFact a
JOIN tblDIM b ON a.MKey = b.MKey
Все возвращаемые столбцы являются целыми числами.Вышеуказанный запрос выполняется за 7 минут, и в плане его выполнения показано, что используется индекс (MKey, PKey).Индекс был перестроен прямо перед запуском.Когда я отключил индекс таблицы фактов (или скопировал данные в новую таблицу с такой же структурой, но без индекса), тот же запрос занимает всего 1:40 минут.
Статистика ввода-вывода также ошеломляет.
С индексом: Таблица 'tblFACT'.Сканирование 70, логическое чтение 190296338, физическое чтение 685138, чтение с опережением 98713
Без индекса: таблица 'tblFACT_copy'.Сканирование 17, логическое чтение 468891, физическое чтение 0, чтение с опережением 419768
Вопрос: почему он пытается использовать индекс и идти по неэффективному пути?