一、首先创建一个类 FwEntityTypeConfiguration 继承 EntityTypeConfiguration ,该类完整代码如下:

 using System.Data.Entity.ModelConfiguration;
namespace Xryang.Core.Mapping
{
/// <summary>
/// 基于框架实体配置:实体被附到FwDbContext数据库对象上
/// </summary>
/// <typeparam name="T">实体map对象</typeparam>
public abstract class FwEntityTypeConfiguration<T> : EntityTypeConfiguration<T> where T : class
{
protected FwEntityTypeConfiguration()
{
PostInitialize();
}
protected virtual void PostInitialize()
{ }
}
}

二、新建一个类 SiteRefundMap 继承 FwEntityTypeConfiguration ,主要作用是关系映射前的配置,其中HasIndex方法即索引配置。

 using Xryang.Core.Domain.Sites;

 namespace Xryang.Core.Mapping.Sites
{
public partial class SiteRefundMap : FwEntityTypeConfiguration<SiteRefund>
{
public SiteRefundMap()
{
this.ToTable("SiteRefund");
this.HasKey(e => e.Id);
this.Property(e => e.VenueId).IsOptional();
this.Property(e => e.UserId).IsRequired();
this.Property(e => e.CreateTime).IsRequired();
this.Property(e => e.DisplayOrder).IsRequired();
this.Property(e => e.IsDelete).IsRequired(); //配置索引
this.HasIndex(t => t.Id).IsUnique();
this.HasIndex(t => t.ApplyId).IsUnique();
this.HasIndex(t => t.UserId).IsUnique();
this.HasIndex(t => t.VenueId).IsUnique();
this.HasIndex(t => t.IsDelete).IsUnique();
this.HasIndex(t => t.CreateTime).IsUnique(); //配置外键关系
this.HasRequired(e => e.SiteApply)
.WithMany()
.HasForeignKey(t => t.ApplyId);
}
}
}

三、创建索引的规则:

1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大 注:字符串类型不能创建索引,配置好之后需要重新创建数据库和数据表才能运行

EntityFramework如何创建索引?的更多相关文章

  1. 【EFCore】利用Entityframework Core创建数据库模型

    利用Entityframework Core创建数据库模型 本文中Entityframework Core版本为v3.1.6 简介 Entity Framework (EF) Core 是微软轻量化. ...

  2. SQL语句-创建索引

    语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100 GO USE 库名GO IF EXISTS (SELECT * FRO ...

  3. *使用while循环遍历数组创建索引和自增索引值

    package com.chongrui.test;/* *使用while循环遍历数组 *  *  * */public class test {    public static void main ...

  4. 程序员眼中的 SQL Server-执行计划教会我如何创建索引?

    先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...

  5. SQL Server创建索引(转)

    什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音. ...

  6. hive创建索引

    索引是hive0.7之后才有的功能,创建索引需要评估其合理性,因为创建索引也是要磁盘空间,维护起来也是需要代价的 创建索引 hive> create index [index_studentid ...

  7. MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...

  8. mysql 创建索引和删除索引

    索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引.删除索引可以利用ALTER TABLE或DROP INDEX语句来实现. ...

  9. Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理

    摘要:Oracle数据库的库表常用操作:创建与添加表空间.临时表空间.创建表分区.创建索引.锁表处理 1.表空间 ■  详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间 --详细查看表空 ...

随机推荐

  1. matplotlib 3D数据-【老鱼学matplotlib】

    直接上代码: import numpy as np import matplotlib.pyplot as plt # 导入显示3D的库 from mpl_toolkits.mplot3d impor ...

  2. Kubernetes 学习1 k8s架构概述

    一.概述 1.意思:舵手,飞行员 2.特点 a.自动装箱,自我修复,水平扩展,服务发现和负载均衡,自动发布和回滚. b.密钥和配置管理,存储编排,批量处理执行. 二.架构术语 1.集群 master( ...

  3. java实验-3

    实验内容 1.XP基础 2.XP核心实践 3.相关工具 实验内容 一.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己 ...

  4. Service的绑定过程

    --摘自<Android进阶解密> 第一步:ContextImpl到AMS的调用过程 第二步:Service的绑定过程 1)几个与Service相关的对象类型 * ServiceRecor ...

  5. javase 基本运算符和三大流程

    范围:-(2 ^ 字节 X 8 - 1)~(2 ^ 字节 X 8 - 1)-  1 主要区别是数据大小范围: 1.  byte    一个字节    -128 ~ 127 2. short    两个 ...

  6. 关于UITabBarController的设置(iOS 开发)

    1.设置图片(选中以及未选中) UITabBarItem *TuiJianItem=[[UITabBarItem alloc]initWithTitle:@"我的" image:[ ...

  7. Cmake知识----编写CMakeLists.txt文件编译C/C++程序

    1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...

  8. [LeetCode] Champagne Tower 香槟塔

    We stack glasses in a pyramid, where the first row has 1 glass, the second row has 2 glasses, and so ...

  9. ng7 设置文件路径别名

    /tsconfig.json 配置后重启服务 { "compileOnSave": false, "compilerOptions": { "base ...

  10. 更改checkbox样式css

    checkbox {  width: 20px; height: 20px;  background-color: #d6bfa6; border: #d6bfa6; -webkit-border-r ...