SQL研习录(25)——索引基础知识及基本操作


版权声明

  • 本文原创作者:清风不渡
  • 博客地址:https://blog.csdn.net/WXKKang

一、索引

1、什么是索引?

  什么是索引呢?索引就像是一本书的目录一样,当我们想要查询一本书中与某个特定主题相关的所有页面的时候,我们会先去查询目录(索引),它按照字母表顺序列出了所有主题,然后从索引中就可以找到一页或多页与该主题相关的页面,简单来说,索引就是指向表中数据的指针
   索引页是数据库中存储索引的数据页,索引页存放检索数据行的关键字页及数据行的地址指针,索引页类似于汉语字典中按拼音或笔画排序的目录页
   索引能够提高 SELECT 查询和 WHERE 子句的速度,但是却降低了包含 UPDATE 语句或 INSERT 语句的数据输入过程的速度;索引的创建与删除不会对表中的数据产生影响
   创建索引需要使用 CREATE INDEX 语句,该语句允许对索引命名,指定要创建索引的表以及对哪些列进行索引,还可以指定索引按照升序或者降序排列
   同 UNIQUE 约束一样,索引可以是唯一的;这种情况下,索引会阻止列中(或者列的组合,其中某些列有索引)出现重复的条目

2、索引的分类

  唯一索引:创建唯一约束会自动创建唯一索引。 它对应的列中仅允许有一个null值
  主键索引:是唯一索引的一种特殊类型。创建主键会自动创建主键索引。 要求主键中的每个值是非空,唯一的
  聚集索引:表中各行的物理顺序与键值的逻辑顺序相同
  非聚集索引:表中各行数据存放的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引有更快的数据访问速度
  复合索引:将多个列组合作为索引
  全文索引:是一种特殊类型的寄语标记的功能型索引,由SQL server 中全文引擎服务创建和维护
  隐式索引:隐式索引由数据库服务器在创建某些对象的时候自动生成。例如,对于主键约束和唯一约束,数据库服务器就会自动创建索引

3、基本语法

  主要通过CREATE INDEX命令来创建索引,它的基本语法如下:

CREATE INDEX index_name ON table_name;

  单列索引: 单列索引基于单一的字段创建,基本语法如下所示:

CREATE INDEX index_name
ON table_name (column_name);

  唯一索引: 唯一索引不止用于提升查询性能,还用于保证数据完整性。唯一索引不允许向表中插入任何重复值。基本语法如下所示:

CREATE UNIQUE INDEX index_name
on table_name (column_name);

  聚簇索引: 聚簇索引在表中两个或更多的列的基础上建立。基本语法如下所示:

CREATE INDEX index_name
on table_name (column1, column2);

  注意: 创建单列索引还是聚簇索引,要看每次查询中,哪些列在作为过滤条件的 WHERE 子句中最常出现
  如果只需要一列,那么就应当创建单列索引。如果作为过滤条件的 WHERE 子句用到了两个或者更多的列,那么聚簇索引就是最好的选择
  删除索引(DROP INDEX)
  索引可以用 SQL DROP 命令删除。删除索引时应当特别小心,数据库的性能可能会因此而降低或者提高,基本语法如下所示:

DROP INDEX index_name;

4、小结

  任何事物都是有两面性的,尽管创建索引的目的是提升数据库的性能,但是还是有一些情况应当避免使用索引,下面就来小结一下:
  什么时候建议使用索引?

  • 频繁搜索的列
  • 经常用作查询选择的列
  • 经常排序、分组的列
  • 经常用作连接的列(主外键)

  什么时候不建议使用索引?

  • 小的数据表不应当使用索引
  • 需要频繁进行大批量的更新或者插入操作的表
  • 如果列中包含大数或者 NULL 值,不宜创建索引
  • 频繁操作的列不宜创建索引

  使用索引查询时应注意的问题

  • 查询是尽量少用 " * " 返回全部列,不要返回不需要的列
  • 索引尽量在字节数少的列上建立索引
  • where 字句中有多个表达式时,包含索引列的表达式应置于其他条件表达式之前
  • 避免在order by 子句中使用表达式
  • 根据业务数据发生频繁,定期重新生成或重新组织索引,进行碎片整理
发布了81 篇原创文章 · 获赞 36 · 访问量 3340

猜你喜欢

转载自blog.csdn.net/WXKKang/article/details/103873681