一、什么是索引
1.使用索引可以使得基于列(或一组列)的查找更加高效
2.索引的分类:聚集索引、非聚集索引
(1)聚集索引是物理索引,索引顺序与物理存储顺序一致;基于数据行的键值
(2)非聚集索引是逻辑索引,索引顺序与物理顺序不一致。具有完全独立于数据行的结构
(3)唯一索引:用作索引的字段中各个数据必须是唯一的,不得重复(相当于普通索引加一层唯一性约束)
3.一个表中可以有多个非聚集索引,但是聚集索引只能有一个。因此在建立聚集索引时一定要确保表中没有多余的聚集索引。(因为聚集索引实质上是对数据进行了排序,一张表只能有一种排序方式)
例如学生表中,整个表中的数据在内存中按学号排序。则学号就是聚集索引。我们按照分数对数据进行了排序并建立索引,则这个索引与物理顺序不一致,为非聚集索引。
4.索引意味着排序。也会占用一定的内存(例如一本没有目录的字典与有目录的字典)同时降低了增删改的效率,只会增加查询效率。因此只在最经常检索的字段上建立索引
二、设置数据表的某一列作为索引
1.默认情况下,当使用的数据库中使用了EF Core指定外键时,外键会自动建立索引(约定)
2.使用HasIndex可以将数据表中的若干列设置为索引:
执行迁移,生成对应的索引:
- 调用IsUnique()可以将这个索引设置为唯一索引:
4.在EF 7.0之后的版本中,索引支持排序操作(原先默认正序排序),现在可以使用IsDescending()方法将索引改为降序排序。
三、复合索引
(1)一般情况下,在进行多条件查询的时候才会使用复合索引。且使用符合索引的查询速度要高于单索引
(2)设置复合索引只需要将HasIndex的参数配置为一个匿名对象即可:
执行数据迁移: