一、什么是索引及索引的优缺点

1.1  索引的基本概念

  数据库索引,是数据库管理系统中一个排序的数据结构,用来协助快速查询数据库表中数据。

  简单理解索引就是一个排好顺序的目录,设置了索引就意味着进行了排序,利用排序快速查找数据(如:不排序就不能使用二分查找,只能全局扫描)。

1.2  索引的优缺点及使用场景

优点:

  ① 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

  ② 利于分组和排序。

③ 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

缺点:

  ① 建立索引需要额外物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

  ② 当对表中的数据进行增加、删除和修改的时候,耗费性能去动态的维护索引。

建议使用场景:

   经常需要搜索的列上(如经常Where条件查询的列);

  主键列,强制该列的唯一性和组织表中数据的排列结构;

  外键列,可以加快多表连接的速度;

  在经常需要根据进行范围搜索和排序操作的列上,因为索引已经排序,其指定的范围是连续的;

不建议添加索引的场合:

  不同值很少的列,如性别列,因为查询出来的结果集很多,不能明显优化查询。

数据类型为text, image和bit列。这是因为,这些列的数据量要么相当大,要么取值很少。

  频繁插入、删除、修改的列,因为动态维修索引降低了操作效率。

二、索引的分类

  三种索引:唯一索引、聚集索引(物理索引)和非聚集索引(逻辑索引)。

2.1  唯一索引  ps:一般直接用唯一约束

  唯一索引是不允许其中任何两行具有相同索引值的索引,建立唯一约束时默认添加唯一索引,如身份证号码列,一张表可以有多个唯一索引。

  主键索引(不能为空)是一种特殊的唯一索引,优先级更高,设置主键是默认添加了主键索引。

2.2  聚集索引与非聚集索引

  在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引,默认是主键列,聚集索引通常提供更快的数据访问速度。

  非聚集索引可以有多个,物理顺序与键值的逻辑(索引)顺序可以不相同。一个简单的例子:对一个教室的学生,每个人都有一个座位号(座位是物理存在的,只有一种排序,这就是聚集索引),我们可以按学生的年龄、身高、体重排序(这样排出来的顺序座号不连续即物理上不连续,在逻辑上是连续的,就是非聚集索引)

三、使用索引

使用索引很简单,下边是代码:

--添加索引

    --语法
--create [clustered,unique,nonclustered] index indexName on tableName(colName)
create clustered index index_id on userInfo(Id) --Id列添加聚集索引(设置主键是自动添加)
create unique index index_perId on UserInfo(usergender) --身份证号添加唯一索引(添加唯一约束自动添加)
create nonclustered index index_age on UserInfo(Age desc) --年龄列添加非聚集索引 --删除索引 --语法
--drop index TableName.IndexName[,TableName.IndexName2]
drop index UserInfo.index_perId

本文参考:

1、https://blog.csdn.net/kennyrose/article/details/7532032

2、https://www.cnblogs.com/hyd1213126/p/5828937.html

Sqlserver中的索引的更多相关文章

  1. sqlserver中 事物 索引及视图

      事务 1.什么是事务 事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行 2.事务的4个属性 (1). ...

  2. SqlServer中查看索引的使用情况

    --查看数据库索引的使用情况 select db_name(database_id) as N'TOPK_TO_DEV', --库名 object_name(a.object_id) as N'Top ...

  3. SQLServer中使用索引视图

    在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

  4. SQLServer中使用索引视图(物化视图)

    物化视图:以前用的普通的视图,普通视图就是一段逻辑语句,对性能没有任何的提升,也不能创建索引,而物化视图会把视图里查询出来的数据在数据库上建立快照,它和物理表一样,可以创建 索引,主键约束等等,性能会 ...

  5. MySql SqlServer Sqlite中关于索引的创建

    最近要更新Cocon90.Db库,令其ORM创建表时实现索引的添加.因此总结下列常用Sql,供大家学习与参考. 一.SqlServer中创建索引可以这样: ) Create Table Test ( ...

  6. SqlServer中Index Seek的匹配规则(一)

    我们知道在SqlServer中,索引对查询语句的优化起着巨大的作用,一般来说在执行计划中出现了Index Seek的步骤,我们就认为索引命中了.但是Index Seek中有两个部分是值得我们注意的,我 ...

  7. 解决“动软代码生成器在SqlServer中会将唯一索引识别为主键"的Bug

    动软代码生成器在SqlServer中,生成的代码会将唯一索引错误地识别为主键, 反编译源代码后,发现其中的SQL条件有误,现修复此Bug. 修复方法:将附件中的”Maticsoft.DbObjects ...

  8. SQLSERVER中如何忽略索引提示

    SQLSERVER中如何忽略索引提示 当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样 当在生产环境里面,由于这个索引提示的原因,优化器一般不会再去考虑其他的索引, ...

  9. SQLServer中在视图上使用索引(转载)

    在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

随机推荐

  1. POJ2187-Beauty Contest-凸包

    平面最远点对 由于点数为1e5,而整数点的情况下,凸包上点的个数为sqrt(M),M为范围. 这样求出凸包之后n^2枚举维护距离就可以了 否则就用旋转卡壳. 这里用了挑战上的做法,比较简洁. #inc ...

  2. UOJ275 [清华集训2016] 组合数问题 【Lucas定理】【数位DP】

    题目分析: 我记得很久以前有人跟我说NOIP2016的题目出了加强版在清华集训中,但这似乎是一道无关的题目? 由于$k$为素数,那么$lucas$定理就可以搬上台面了. 注意到$\binom{i}{j ...

  3. [SP1043] GSS1 - Can you answer these queries I

    传送门:>Here< 题意:求区间最大子段和 $N \leq 50000$ 包括多组询问(不需要支持修改) 解题思路 线段树的一道好题 我们可以考虑,如果一组数据全部都是正数,那么问题等同 ...

  4. 一种HBase表数据迁移方法的优化

    1.背景调研: 目前存在的hbase数据迁移主要分如下几类: 根据上图,可以看出: 其实主要分为两种方式:(1)hadoop层:因为hbase底层是基于hdfs存储的,所以可以通过把hdfs上的数据拷 ...

  5. Fiddler中显示IP方法

    如何在fiddler查看到请求的IP地址?就像下面这样 打开fiddler, 快捷键Ctrl+R  或者  菜单->Rules->Customize Rules…,然后在CustomRul ...

  6. Hdoj 2084.数塔 题解

    Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大 ...

  7. 解决mysql配置文件my.cnf添加max_connections不生效

    问题描述: 最新为了方便测试,通过mysql官方指定的yum源安装了mysql5.6.40,在向mysql的配置文件my.cnf添加max_connections=3600后,重启mysql后发现不生 ...

  8. MongoDB查询内嵌数组(限定返回符合条件的数组中的数据)(1)

    https://blog.csdn.net/bicheng4769/article/details/79579830 项目背景 最近在项目中使用mongdb来保存压测结果中的监控数据,那么在获取监控数 ...

  9. 洛谷P3703 树点涂色

    题意: 解: 发现我们每次染的都是不同的颜色,那么用lct维护的话一个颜色就会在一个splay里.染色是access. 维护每个节点到根路径上的虚边数量. 虚边的切换只会在access和link中出现 ...

  10. 【洛谷P1198】最大数

    题目大意:在线维护一个序列,支持插入一个数,查询区间最值. 题解:直接建立线段树,插入就单点修改,查询就正常查..orz开始还真没想到.. 代码如下 #include <bits/stdc++. ...