C# LINQ是否利用数据库索引执行此查询?
除了C# LINQ是否利用数据库索引执行此查询?,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,除了ID属性外,我还将EntityFramework设置为模型的Name属性的索引: public class EntityTypeConfiguration : IEntityTypeConfiguration<Student> { public void Configure(EntityTypeBuilder<Student> builder) { builder.ToTable("Students"); builder
ID
属性外,我还将EntityFramework设置为模型的Name
属性的索引:
public class EntityTypeConfiguration : IEntityTypeConfiguration<Student>
{
public void Configure(EntityTypeBuilder<Student> builder)
{
builder.ToTable("Students");
builder.HasKey(obi => obi.ID);
builder.Property(obj => obj.ID).IsRequired(true);
builder.HasIndex(obj => obj.Name).IsUnique();
}
}
这个查询执行了数千次,数据库中有数百万名Student
s。因此,它的性能至关重要,但目前运行速度非常慢,因此我不确定LINQ是否真的利用了数据库索引
有什么想法吗?当EF以代码优先的方式使用时(即使用对象模型创建数据库架构),HasIndex用于指示EF在列上创建索引。否则就没有效果
要加快查询速度,应确保数据库中的索引配置正确(例如,名称列上有一个索引),并且EF生成的查询性能良好 尝试运行,这将允许您捕获LINQ生成的查询并查看查询计划。数据库中该列上是否实际有索引?(我想知道您是否实际迁移了db并创建了索引)要真正了解任何ORM或linqtoswl中发生的情况,唯一的方法是查看生成的SQL的结果查询计划。请使用Management Studio生成现有表(包括索引)的现有CREATE TABLE脚本在你的问题中包括这一点。
var student = dbContext.Students.First(x => x.Name == "Meryl");