KB2938462 - ИСПРАВЛЕНО: при запросе в SQL Server 2014 возвращаются отсутствующие или неверные сведения об отсутствующих индексах

Применяется к
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Проблема

Предположим, что вы используете Microsoft SQL Server 2014. Вы можете столкнуться с двумя следующими проблемами, включенными в заметки о выпуске SQL Server 2014:

  • Отсутствующие сведения об индексе неправильно сообщают о включенных столбцах для таблицы, оптимизированной для памяти

    Проблема. Если SQL Server 2014 обнаруживает отсутствующий индекс для запроса в таблице, оптимизированной для памяти, он сообщит об отсутствии индекса в SHOWPLAN_XML, а также в отсутствующих индексных динамических представлениях, таких как sys.dm_db_missing_index_details. В некоторых случаях отсутствующие сведения об индексе будут содержать включенные столбцы. Поскольку все столбцы неявно включены во все индексы в таблицах, оптимизированных для памяти, не допускается явное указание включенных столбцов с индексами, оптимизированными для памяти.

  • Отсутствующие сведения об индексе пропускают отсутствующие индексы, если хэш-индекс существует, но не подходит для запроса

    Проблема. Если у вас есть индекс HASH в столбцах оптимизированной для памяти таблице, на которую ссылается запрос, но он не может быть использован в запросе, SQL Server 2014 не всегда будет сообщать об отсутствующем индексе в SHOWPLAN_XML и в sys.dm_db_missing_index_details DMV.

    В частности, если запрос содержит предикаты равенства, связанные с подмножеством ключевых столбцов индекса, или если он содержит предикаты неравенства, связанные со столбцами ключевых столбцов индекса, индекс HASH нельзя использовать как есть, и для эффективного выполнения запроса потребуется другой индекс.

Причина

Проблемы возникают из-за того, что отсутствующая логика индекса в оптимизаторе запросов не отличает традиционные индексы без кластеризации в таблицах на диске от новых типов индексов для таблиц, оптимизированных для памяти.

Решение

Проблемы были впервые исправлены в следующем накопительном пакете обновления SQL Server. 

Накопительный пакет обновления 1 для SQL Server 2014 г. /en-us/help/2931693

Сведения о накопительных обновлениях для SQL Server

Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые входили в состав предыдущего накопительного пакета обновления. Ознакомьтесь с последними накопительными пакетами обновления для SQL Server:

      

Временное решение

Чтобы обойти эти проблемы, воспользуйтесь следующими временными решениями:

  • Временное решение проблемы: отсутствующие сведения об индексе неправильно сообщают о включенных столбцах для таблицы, оптимизированной для памяти

    Не указывайте предложение INCLUDE для индексов в таблицах, оптимизированных для памяти.

  • Временное решение проблемы: отсутствующие сведения об индексе пропускают отсутствующие индексы, если хэш-индекс существует, но не подходит для запроса

    Если вы используете хэш-индексы, проверьте запросы и планы запросов, чтобы определить, могут ли запросы выиграть от операций Index Seek к подмножеству ключа индекса или Index Seek к предикатам неравенства. Если вам нужно выполнить поиск в подмножестве ключа индекса, используйте НЕКЛАСТЕРИЗОВАННЫЙ индекс или HASH-индекс именно в тех столбцах, в которых нужно выполнить поиск. Если вам нужно найти предикат неравенства, используйте NONCLUSTERED индекс вместо HASH.

Примечание: Временные решения взяты из заметок о выпуске SQL Server 2014

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».