六,索引原理与配置

    技术2022-07-21  86

    索引原理与配置
    索引 索引是许多数据常见概念,数据存储区中的实现可能有所不同,索引的作用是让基于列(或一组列) 的查找更高效。 数据库索引是什么? 数据库索引融会贯通 20分钟数据库索引设计实战 数据库索引为什么用B+树实现?

    深入浅出数据库索引原理

    modelBuilder.Entity< Blog>().HasIndex(b => b.Url); modelBuilder.Entity< Blog>().HasIndex(b => b.Url).IsUnique(); modelBuilder.Entity< Person>().HasIndex(p => new { p.FirstName, p.LastName });

    按照约定,EF Core 生成的索引名为 IX_< type name>_< property name> 格式。 对于复合索引 < property name> 使用 下划线分隔属性名称,可手动指定索引名称。

    modelBuilder.Entity< Blog>().HasIndex(b => b.Url).HasName("Index_Url"); modelBuilder.Entity< Blog>().HasIndex(b => b.Url).HasFilter("[Url] IS NOT NULL"); modelBuilder.Entity< Blog>().HasIndex(b => b.Url).IsUnique().HasFilter(null); 备用键 除主键之外,备用键也能唯一标识一条数据(跟主键一样具有唯一约束)。备用键可以用作外键关系的目标。当使用关系数据 库时,系统通常会在需要时默认你引入备用键,你无需手动配置它们,当然也可以手动配置。 按照约定,系统将在识别外键属性目标(不是主键)时为你引入备用键,充当关系的目标。 modelBuilder.Entity<Post>().HasOne(p => p.Blog).WithMany(b => b.Posts).HasForeignKey(p => p.BlogUrl).HasPrincipalKey(b => b.Url);

    Fluent API 可用于手动配置要作为备用键的单个属性。

    modelBuilder.Entity< Car>().HasAlternateKey(c => c.LicensePlate); modelBuilder.Entity< Car>().HasAlternateKey(c => new { c.State, c.LicensePlate });

    按照约定,备用键的索引和约束被命名为 AK_< type name>_< property name> 格式, 备用组合键 < property name> 为下划线分隔属性名称的列表。

    可以使用 Fluent API 配置备用键的索引和约束名称。

    modelBuilder.Entity<Car>().HasAlternateKey(c => c.LicensePlate).HasName("AlternateKey_LicensePlate");
    Processed: 0.008, SQL: 9