索引-定义、创建(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

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二