SQL Server索引
索引
个人理解:就是用一个列或者多个列建立的,为了加快查询速度,但是可能会占用一些存储空间的结构,聚集索引只有一个,非聚集索引可以多个
索引 是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
索引的目的是为了提高SQL Server系统的性能,提高查询数据效率,减少系统响应时间。
聚集索引和非聚集索引
具体表中的哪一列建立索引,可以定义 ,由DBMS管理维护,索引表也占据空间,建多了维护成本也高
非聚集索引:可以有多张,索引表是排序的,基本表不排序。逻辑上连续,数据存储上不连续。SQL Server 默认建立非聚集索引
- 数据行物理上按索引键的顺序存储。
- 一个表只能有一个聚集索引。
- 通常用于查询返回表中大部分行的情况。
聚集索引:一张,索引表跟着基本表排序,物理上连续,SQL Server 主键默认有一个聚集索引
- 数据行物理存储顺序与索引键的顺序无关。
- 一个表可以有多个非聚集索引。
- 非聚集索引包含一个指向数据行的指针,这增加了存储开销,但可能加速某些查询。
SQL Server如何新建索引,重新生成索引
什么时候建立索引
主键
外键
经常查询列
经常where的列
经常 order by,group by、distinct
缺点和问题:
对于增加、修改、删除操作,需要动态维护,增加时间
索引也占用磁盘空间,索引表太多,占用空间过大
索引的创建和维护也需要一定时间
使用使用SQL Server的性能监控工具 监控索引使用情况
使用SQL Server Profiler
SQL Server Profiler是SQL Server的一个图形化跟踪工具,它可以捕获服务器事件,并将这些事件保存为跟踪文件或实时显示。你可以使用它来监控索引的使用情况。
数据库中索引相关的表
sys.indexes:包含数据库中所有表的索引信息。
sys.dm_db_index_usage_stats:提供索引使用的统计信息,包括扫描、查找和查找键查找等操作的次数。
sys.dm_db_missing_index_details:显示查询优化器建议的缺失索引的详细信息。