索引-定义、创建(CREATE INDEX)、删除(DROP INDEX)

2024-06-16 19:44

本文主要是介绍索引-定义、创建(CREATE INDEX)、删除(DROP INDEX),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述

1、索引是SQL语言定义的一种数据对象,是大多数DBMS为数据库中基本表创建的一种辅助存取结构,用于响应特定查询条件进行查询时的查询速度,DBMS根据查询条件从数据库文件中,选择出一条或者多条数据记录以供检索,当多个数据记录均满足某一查询条件时,按数据记录的物理顺序,第一条记录最先被找到,并将其指定为当前记录,以后的查找操作就从这条记录开始,再定位满足条件的下一条记录,当查询只涉及数据库文件中少量数据记录时,如果磁盘上所有数据记录逐一读取检查,效率低下,最好系统能够直接定位那些满足查询条件的数据记录,这就是创建索引的目的

二、索引的概念

索引是建立在关系的某一属性(组)上的一种数据结构,针对某个属性建立索引,就是根据此属性值将记录进行逻辑排序

三、索引的作用

索引提供了在改属性(组)上快速查找具有某个特定值的元组的方法

1、索引文件所占磁盘空间通常比数据库文件所在磁盘空间要少

2、索引记录是有序的,可以使用二分查找法来查找索引键值所在记录

四、索引的分类

1、聚集索引(主索引):数据文件中数据记录的物理顺序与索引记录的排列顺序在索引键上保持一致,只能有一个

2、非聚集索引(次索引/辅助索引):数据库文件中数据记录不按索引键值物理排序,可以有多个

五、索引的创建

方式一:创建基本表的同时创建索引

CREATE TABLE <表名>

(<属性列名1> <数据类型> 【列级完整性约束条件】

【,<属性列名2><数据类型> 【列级完整性约束条件】,...】

【,<表级完整性约束条件>】

)

PRIMARY KEY 【CLUSTERED|NONCLUSTERED

PRIMARY KEY 【CLUSTERED|NONCLUSTERED】(<列名组>)

1、一般DBMS默认基于表定义的主键创建聚集索引,使得所创建的表的数据文件是一个顺序文件

2、举例1:创建一个与表s逻辑结构相同的表的表s2的同时创建聚集索引

create table s2(sNo char(12) primary key clustered,sN varchar(6) not null,sex char(2) default'男',sB Date,sD varchar(16),check(sex in('男','女'))
);

3、举例2:创建表s3的同时创建非聚集索引

create table s3(sNo char(12) ,sN varchar(3) not null,sex char(1) default'男',sB Date,sD varchar(8),check(sex in('男','女')),primary key nonclustered (sNo)
);

方式二:单独创建索引

CREATE 【UNIQUE】【CLUSTEREDINDEX <索引名>

ON <表名> (<属性列名1>【<次序>】【,<属性列名2>【次序】,...】)

其他参数

1、注:

(1)UNIQUE:索引键值唯一,即创建的索引中不包含索引键值相同的索引项

(2)CLUSTERED:聚集索引,在默认情况下,CREATE INDEX语句创建的是非聚集索引

(3)<表名>:创建索引的表

(4)<属性列名1>:索引键 

(5)<次序>:每个属性列名后面可以用次序来指定索引键值的排列顺序,可选ASC(升序)或DESC(降序),默认是ASC

(6)其他参数:是与索引文件物理存储相关的因素,可以不指定,由DBMS决定

2、举例1:在基本表s3上创建基于出生日期的聚集索引

create clustered index sY5
on s3(sB desc);

将表s中的元组全部复制到表s3中,则会发现,表s3中的元组都是按照索引键值降序排列的

3、举例2:在基本表s2上创建基于姓名的唯一键值索引

create unique index sY1
on s2(sN)

4、举例3:在基本表s2上创建基于出生日期的非聚集索引

create index sY2
on s2(sB)

创建索引后,相应的索引描述存储到数据字典中,当不在需要索引时应及时删除,避免系统为维护索引降低系统操作性能

六、索引的删除

1、删除索引的语句格式

DROP INDEX <索引名> ON <表名>

或    DROP INDEX <表名> .<索引名>

2、举例1:删除基本表s2中的索引sY4

drop index sY2 on s2

七、索引的创建原则

1、表中数据较少时一般不需要创建索引

2、数据库主要用于查询时,可根据需要多创建一些索引

3、数据库处于频繁更新时,不宜创建过多的索引

4、最好在创建任何非聚集索引之前创建聚集索引

5、索引键一般是经常出现在查询条件中的属性,一般基于主键和外键创建索引

6、在频繁更新的属性上尽量不创建聚集索引,一般在主键上创建聚集索引

7、可基于经常用于统计查询的属性创建索引

八、总结

1、索引是DBMS中常用的快速存取磁盘上数据库中数据的存取方法

2、索引由数据库管理员或者数据库拥有者管理,由DBMS动态维护

3、DBMS利用索引对查询进行优化处理实现高效查询

这篇关于索引-定义、创建(CREATE INDEX)、删除(DROP INDEX)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067373

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创