我有一个奇怪的性能问题与ef核心6和MySlq,并希望你可以帮助我发现问题。这是我的装置。
每个层次结构方法的
公共类RealEstate : Property{ }
公共接口IUnitOfWork { IDataAccessLayer PropertyRepository { get;} IDataAccessLayer RealEstateRepository { get;}
公共类MeerkatContext : IdentityDbContext { public MeerkatContext(DbContextOptions options):base(options) {} public DbSet属性{ get;set;} public DbSet RealEstate { get;set;}
上定义了以下索引

以下是问题所在:
以下查询所需时间少于1秒:
var count1 = await this._unitOfWork.PropertyRepository.CountAsync(x =>
x.CountryId == 1 && !x.IsBlocked && x.IsPublic);这个花了10秒:
var count2 = await this._unitOfWork.RealEstateRepository.CountAsync(x =>
x.CountryId == 1 && !x.IsBlocked && x.IsPublic);我被踩了。任何帮助都会很感激的。
编辑以在MySql WorkBench中显示查询执行

谢谢
发布于 2022-07-04 13:45:07
如果您想搜索未阻塞的项,请更改逻辑以帮助使用SQL:
AND NOT IsBlocked -- inefficient
AND IsBlocked = 0 -- efficient (using "=" instead of "NOT")
AND NotBlocked -- efficient (flip the name and logic)一般情况下:在构造SQL时避免使用OR和NOT。(这太简单化了。)
然后将这个4列索引添加到表中:
INDEX(CountryId, IsBlocked [or NotBlocked], IsPublic, CategoryName)查看模式的其余部分以获得类似的更改。
https://stackoverflow.com/questions/72842079
复制相似问题