KB4577933 - FIX: Cascade delete on key values outside of leading table histogram bounds causes index scan in SQL Server 2017

Applies to: SQL Server 2017 Developer on WindowsSQL Server 2017 Enterprise Core on WindowsSQL Server 2017 Enterprise on Windows

Symptoms


Assume that youhave a table using a foreign key constraint set to cascade delete, and thestatistics on the foreign key column don't cover the entire range of the keyvalues in the table (for example: because statistics were not updated afterdata distribution changes to the table). In this scenario, when you try todelete a row corresponding to a key value not represented in the statisticshistogram, and the Query Optimizer is using the default cardinality estimation,the delete operation is slower than expected. You may also notice an index scanoperation is used to find the matching rows in the referencing table.

Status


Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section. 

Resolution


This issue is fixed in the following cumulative update for SQL Server:
Note: This fix is only enabled when you turn optimizerhotfixes ON (either through the database scoped configuration option, query hint ortrace flag 4199).

About cumulative updates for SQL Server:
Each new cumulative update for SQL Server contains all the hotfixes and all the security fixes that were included with the previous cumulative update. Check out the latest cumulative updates for SQL Server:

Workaround


To work around this issue, use one of the following methods:
  • Use legacy cardinality estimation. For more information, see Cardinality Estimation (SQL Server).
  • Remove the cascade delete from the Foreign Key definition, and perform the delete operation by using JOIN between parent and child tables to accomplish the equivalent of cascade delete.
  • Update statistics on the parent table with FULLSCAN before deleting data.

References


Learn about the terminology that Microsoft uses to describe software updates.