Ознаки
Припустимо, що у вас є таблиця з обмеженням зовнішнього ключа для каскадного видалення, а статистика у стовпці зовнішній ключ не покриває весь діапазон значень ключа в таблиці (наприклад, оскільки статистика не оновлюватиметься після зміни розподілу даних до таблиці). У цьому сценарії під час спроби видалити рядок, що відповідає значенню ключа, не відображене в гістограмі статистики, а в Оптимізаторі запитів використовується Оцінка за замовчуванням, якщо операцію видалення буде повільніше, ніж очікувалося. Ви також можете помітити, що для пошуку відповідних рядків у таблиці посилань використовується операція перевірки індексу.
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".
Спосіб вирішення
Ця проблема усунена в таких сукупних оновлень для SQL Server:
Примітка. Це виправлення активується, лише якщо ввімкнути функцію оптимізатора виправлень (за допомогою параметра конфігурація рівня бази даних, підказки або трасування 4199).
Відомості про накопичувальне оновлення для сервера SQL Server:
Кожне нове Сукупне оновлення для SQL Server містить усі поточні виправлення та всі виправлення системи безпеки, які були включені до попереднього сукупного оновлення. Ознайомтеся з найновішими сукупними оновленнями для сервера SQL Server:
Інші способи вирішення
Щоб вирішити цю проблему, скористайтесь одним із запропонованих нижче способів.
-
Використання оцінки застарілих оцінок. Докладні відомості наведено в статті оцінювання кількості _ даних (SQL Server).
-
Видаліть Каскадне видалення з визначення зовнішнього ключа та виконайте операцію видалення за допомогою об'єднання між батьківськими та дочірніми таблицями, щоб виконати еквівалент каскадного видалення.
-
Оновлення статистики в батьківській таблиці з FULLSCAN перед видаленням даних.
Посилання
Відомості про термінологію , яку корпорація Майкрософт використовує для опису оновлень програмного забезпечення.