Symptomy
Załóżmy, że w tabeli jest ustawione ograniczenie klucza obcego w celu usuwania kaskadowego, a statystyka w kolumnie klucza obcego nie obejmuje całego zakresu wartości klucza w tabeli (na przykład dlatego, że statystyki nie zostały zaktualizowane po zmianie rozkładu danych w tabeli). W tym scenariuszu podczas próby usunięcia wiersza odpowiadającego wartości klucza, która nie jest reprezentowana w histogramie statystyki, a optymalizator zapytań używa domyślnej szacowania kardynalności, operacja usuwania jest wolnsza niż oczekiwano. Możesz również zauważyć operację skanowania indeksu, która umożliwia znalezienie zgodnych wierszy w tabeli odwoływać się.
Stan
Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".
Rozwiązanie
Ten problem został rozwiązany w następujących aktualizacjach skumulowanych programu SQL Server:
Uwaga: Ta poprawka jest włączona tylko po włączeniu poprawek optymalizatora (za pomocą opcji konfiguracji z zakresem bazy danych, wskazówki dotyczącej zapytania lub flagi śledzenia 4199).
Informacje o aktualizacjach skumulowanych dla programu SQL Server:
Każda nowa aktualizacja skumulowana dla programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej aktualizacji skumulowanej. Zapoznaj się z najnowszymi aktualizacjami skumulowanymi dla programu SQL Server:
Obejście
Aby obejść ten problem, użyj jednej z następujących metod:
-
Użyj szacowania kardynalności starszej. Aby uzyskać więcej informacji, zobacz oszacowanie kardynalności (SQL Server).
-
Usuwanie kaskadowe z definicji klucza obcego i wykonywanie operacji usuwania za pomocą operacji JOIN między tabelami nadrzędnymi i podrzędnymi w celu wykonania równoważnego z usuwaniem kaskadowym.
-
Przed usunięciem danych zaktualizuj statystyki w tabeli nadrzędnej za pomocą PEŁNEGO.EKW.KREŚL.
Informacje
Poznaj terminy używane przez firmę Microsoft do opisywania aktualizacji oprogramowania.