数据库索引和EFCore的索引映射

本文介绍了数据库索引的作用、优点和弊端,详细讲解了聚集索引和非聚集索引的区别,并探讨了索引设计原则。此外,还详细阐述了如何在EFCore中进行索引映射,包括自动映射和手动设置索引的方法。
摘要由CSDN通过智能技术生成

 一. 简介

1.背景

  索引用于快速找出在某个列中有某一特定值的行,不使用索引,数据库必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多, 如果表中查询的列有一个索引,数据库能快速到达一个位置去搜索数据。

2.含义

 索引是一个单独的,存储在磁盘上的数据结构,它们包含对数据表里所有记录的引用指针,使用索引用于快速找出在某个或多个列中有某一特定值的行,对相关列使用索引是降低查询操作时间的最佳途径。索引可以是由表或视图中的一列或多列生成的键。

例如:数据库中有20000条记录,现在要执行这样一个查询:SELECT * FROM tableName WHERE num=10000。如果没有索引,必须遍历整个表,直到num=10000的这一行为止;如果在num列上创建索引,SQL Server不需要任何扫描,直接在索引里面找10000,就可以得知这一行的位置。可见,索引的建立可以加快数据的查询速度。

3.索引的优点

 (1).通过创建唯一索引,可以保证数据库表的每一行数据的唯一性.(eg:表主键)

 (2).建索引最主要的目的:大大加快了数据的查询速度.

 (3).实现数据的参照完整性,可以加速表和表之间的连接.

 (4).在使用分组和排序子句进行查询时,也可以显著减少查询中分组和排序的时间

4.索引的弊端

 (1).创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加.

 (2).索引需要占磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到做大文件尺寸。

 (3).对表中的数据进行增加,删除和修改的时候,索引也要动态地维护,这样就就降低了数据的维护速度。

二. 索引分类

  SQL Server中的索引有两种:聚集索引和非聚集索引,它们的区别是在物理数据的存储方式上。

1.聚集索引

  聚集索引基于数据行的键值,在表内排序和存储这些数据行。

 (1).每张表只能有一个聚集索引,因为数据行本身只能按一个顺序存储.

 (2).表中的物理顺序和索引中行的物理顺序是相同的,创建任何非聚集索引之前要先创建聚集索引,这是因为非聚集索引改变了表中行的物理顺序.

 (3).关键值的唯一性使用UNIQUE关键字或者由内部的唯一标识符明确维护.

 (4).在索引的创建过程中,SQL Server临时使用当前数据库的磁盘空间,所以要保证有足够的空间创建索引

2.非聚集索引

  非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序,非聚集索引包含索引键值和指向表数据存储位置的行定位器。可以对表或索引视图创建多个非聚集索引。通常,设计非聚集索引是为了改善经常使用的、没有建立聚集索引的查询的性能。查询优化器在搜索数据值时,先搜索非聚集索引以找到数据值在表中的位置,然后直接从该位置检索数据。这使得非聚集索引成为完全匹配查询的最佳选择,因为索引中包含搜索的数据值在表中的精确位置的项。

 考虑使用非聚集索引的情况:

 (1).使用JOIN或者GROUP BY子句,应为连接和分组操作中所涉及的列创建多个非聚集索引,为任何外键创建一个聚集索引.

 (2).包含大量唯一值的字段.

 (3).不返回大型结果集的查询,创建筛选索引以覆盖从大型表中返回定义完善的的行子集的查询.

 (4).经常包含

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值