为什么 EF Core 2.1 只为 2 个 FK 添加 1 个索引?
Why does EF Core 2.1 only add 1 index for 2 FKs?
我使用 SQL Server 2017 (v14.0.2027.2) 和 EF Core 2.1。
我在此代码上添加迁移后:
public class TblTrack
{
public long Id { get; set; }
...
}
public class TblProduct
{
public long Id { get; set; }
...
}
public class TblProductItem
{
[Key]
[Required]
public long ProductId { get; set; }
[Key]
[Required]
public long TrackId { get; set; }
// Navigation properties
public TblProduct Product { get; set; }
public TblTrack Track { get; set; }
}
Ef Core 仅创建 TrackId 索引
migrationBuilder.CreateIndex(
name: "IX_tbl_ProductItems_TrackId",
table: "tbl_ProductItems",
column: "TrackId");
为什么索引是为 TrackId
而不是为 ProductId
创建的?
Why was an index created for TrackId but not for ProductId?
这实际上非常聪明,并且是 EF 的正确行为。 TblProductItem 上的主键是 (ProductId,TrackId)。所以你 已经 有一个支持该外键的索引(因为 FK 列是该索引中的前导列)。只有尾随的 PK 列 (TrackId) 需要单独的索引来支持外键。
我使用 SQL Server 2017 (v14.0.2027.2) 和 EF Core 2.1。
我在此代码上添加迁移后:
public class TblTrack
{
public long Id { get; set; }
...
}
public class TblProduct
{
public long Id { get; set; }
...
}
public class TblProductItem
{
[Key]
[Required]
public long ProductId { get; set; }
[Key]
[Required]
public long TrackId { get; set; }
// Navigation properties
public TblProduct Product { get; set; }
public TblTrack Track { get; set; }
}
Ef Core 仅创建 TrackId 索引
migrationBuilder.CreateIndex(
name: "IX_tbl_ProductItems_TrackId",
table: "tbl_ProductItems",
column: "TrackId");
为什么索引是为 TrackId
而不是为 ProductId
创建的?
Why was an index created for TrackId but not for ProductId?
这实际上非常聪明,并且是 EF 的正确行为。 TblProductItem 上的主键是 (ProductId,TrackId)。所以你 已经 有一个支持该外键的索引(因为 FK 列是该索引中的前导列)。只有尾随的 PK 列 (TrackId) 需要单独的索引来支持外键。