可以为 WareSkuDetailImageSetting 的 SpecId01、SpecId02、SpecId03、SpecItemId01、SpecItemId02、SpecItemId03 字段创建联合索引,以优化查询性能。ApplyStatus 字段可以不做索引,因为它的基数很小,即只有几个可能的取值。如果需要在查询中使用 ApplyStatus 字段,可以将其包含在联合索引中。

public class WareSkuDetailImageSetting : Entity
{
    public long WareId { get; set; }
    public long CatalogWareId { get; set; }
    public long BrandId { get; set; }
    public long SpecId01 { get; set; }
    public long SpecItemId01 { get; set; }
    public long SpecId02 { get; set; }
    public long SpecItemId02 { get; set; }
    public long SpecId03 { get; set; }
    public long SpecItemId03 { get; set; }
    public WareConstant.ApplyStatus ApplyStatus { get; set; }
    public List<Image> Images { get; set; } = new();
}

long[] wareSkuSpecItemIds = wareSku.Attrs.Select(n => n.VId).ToArray();
                        WareSkuDetailImageSetting wareSkuDetailImageSetting = await _productDbContext.WareSkuDetailImageSetting
                            .FirstOrDefaultAsync(n => n.SpecId01 == catalogWareSkuDetailImageSpecs.SpecId01
                                                      && n.SpecId02 == catalogWareSkuDetailImageSpecs.SpecId02
                                                      && n.SpecId03 == catalogWareSkuDetailImageSpecs.SpecId03
                                                      && n.ApplyStatus == WareConstant.ApplyStatus.Applied
                                                      && n.DelStatus != DelStatusConstant.Deleted
                                                      && (wareSkuSpecItemIds.Contains(n.SpecItemId01)
                                                          && wareSkuSpecItemIds.Contains(n.SpecItemId02)
                                                          && wareSkuSpecItemIds.Contains(n.SpecItemId03)));
C# Entity Framework Core 优化查询:WareSkuDetailImageSetting 联合索引

原文地址: https://www.cveoy.top/t/topic/gFDj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录