在 AdventureWorks2016 中执行以下查询时:
USE AdventureWorks2016
BEGIN TRAN;
SELECT
Sales.SalesOrderHeader.SalesOrderID
FROM
Sales.SalesOrderHeader
JOIN
Sales.Customer
ON Sales.SalesOrderHeader.CustomerID = Sales.Customer.CustomerID
OPTION (RECOMPILE, QUERYTRACEON 8605, QUERYTRACEON 8606, QUERYTRACEON 8607, QUERYTRACEON 3604);
COMMIT TRAN;
GO
我对 CustomerID 进行了非聚集扫描(计划),因此消除了外键,它也适用于采购模式(计划),但在这个查询中(计划):
BEGIN TRAN
SELECT P.ProductModelID
FROM Production.Product P
JOIN Production.ProductModel PM
ON P.ProductModelID = PM.ProductModelID
OPTION (RECOMPILE, QUERYTRACEON 8605, QUERYTRACEON 8606, QUERYTRACEON 8607, QUERYTRACEON 3604);
COMMIT TRAN
或者(计划):
BEGIN TRAN
SELECT P.ProductID
FROM Production.Product P
JOIN Production.ProductModel PM
ON P.ProductModelID = PM.ProductModelID
OPTION (RECOMPILE, QUERYTRACEON 8605, QUERYTRACEON 8606, QUERYTRACEON 8607, QUERYTRACEON 3604);
COMMIT TRAN
我得到了带有连接的扫描。在 SSMS 21 中的图表编辑器中:
(name)
FK_Product_ProductModel_ProductModelID
description
Foreign key constraint referencing ProductModel.ProductModelID.
我在发布问题之前重新启用了它我仍然有相同的计划外键是
- 值得信赖
- 未残疾
- 不允许空值
- 不是一个不同的架构
问题是:为什么我没有消除外键?