Oracle(21)什么是聚集索引和非聚集索引?

devtools/2024/9/24 1:34:13/

数据库管理系统中,索引是一种用于加速数据检索的结构。主要有两种类型的索引:聚集索引(Clustered Index)和非聚集索引(Non-Clustered Index)。它们在数据存储和检索方面有不同的实现和用途。

聚集索引(Clustered Index)

聚集索引决定了表中数据的物理存储顺序。一个表只能有一个聚集索引,因为数据行只能有一种物理排序方式。聚集索引通常用于主键,因为它能提高查询性能。

特点
  1. 物理排序:数据行按照索引键的顺序物理存储。
  2. 唯一性:每个表只能有一个聚集索引。
  3. 性能:对于范围查询和排序操作,聚集索引性能较高。
创建聚集索引的示例
-- 创建一个表
CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50)
);-- 创建聚集索引
CREATE CLUSTERED INDEX idx_employee_id
ON employees(employee_id);

在这个示例中,employee_id是主键,并且是聚集索引的一部分。数据行将按照employee_id进行物理排序。

非聚集索引(Non-Clustered Index)

非聚集索引不改变表中数据的物理存储顺序。它创建一个单独的结构(通常是B-tree),该结构包含索引键和指向数据行的指针。一个表可以有多个非聚集索引。

特点
  1. 逻辑排序:数据行的物理存储顺序不变,但索引键在索引结构中排序。
  2. 多个索引:每个表可以有多个非聚集索引。
  3. 性能:对于精确查找和特定列的查询,非聚集索引性能较高。
创建非聚集索引的示例
-- 创建一个表
CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50)
);-- 创建非聚集索引
CREATE NONCLUSTERED INDEX idx_last_name
ON employees(last_name);-- 创建另一个非聚集索引
CREATE NONCLUSTERED INDEX idx_department
ON employees(department);

在这个示例中,last_namedepartment列上创建了非聚集索引。尽管数据行的物理顺序不变,但索引加速了基于这些列的查询。

查询索引信息

可以通过系统视图查询索引的相关信息:

-- 查询所有索引
SELECT name AS index_name,type_desc AS index_type,is_unique,is_primary_key
FROM sys.indexes
WHERE object_id = OBJECT_ID('employees');

示例

以下是一个完整的示例,展示了如何创建、使用和查询聚集索引和非聚集索引:

-- 创建表
CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50)
);-- 创建聚集索引
CREATE CLUSTERED INDEX idx_employee_id
ON employees(employee_id);-- 创建非聚集索引
CREATE NONCLUSTERED INDEX idx_last_name
ON employees(last_name);-- 插入数据
INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (1, 'Alice', 'Smith', 'HR'),(2, 'Bob', 'Johnson', 'IT'),(3, 'Charlie', 'Brown', 'Finance');-- 查询表数据
SELECT * FROM employees;-- 查询索引信息
SELECT name AS index_name,type_desc AS index_type,is_unique,is_primary_key
FROM sys.indexes
WHERE object_id = OBJECT_ID('employees');

总结

聚集索引和非聚集索引是提高数据库查询性能的重要工具。聚集索引决定了表中数据的物理存储顺序,适用于主键和范围查询;非聚集索引则创建一个单独的结构,用于加速特定列的查询。理解和正确使用这两种索引类型,对于优化数据库性能至关重要。


http://www.ppmy.cn/devtools/85264.html

相关文章

Python-数据爬取(爬虫)

~~~理性爬取~~~ 杜绝从入门到入狱 1.简要描述一下Python爬虫的工作原理,并介绍几个常用的Python爬虫库。 Python爬虫的工作原理 发送请求:爬虫向目标网站发送HTTP请求,通常使用GET请求来获取网页内容。解析响应:接收并解析HTTP响…

深入浅出mediasoup—WebRtcTransport

mediasoup 提供了多种 transport,包括 WebRtcTransport、PipeTransport、DirectTransport、PlainTransport 等,用来实现不同目的和场景的媒体通信。WebRtcTransport 是 mediasoup 实现与 WebRTC 客户端进行媒体通信的对象,是 mediasoup 最重要…

二、【Python】入门 - 【PyCharm】安装教程

往期博主文章分享文章: 【机器学习】专栏http://t.csdnimg.cn/sQBvw 目录 第一步:PyCharm下载 第二步:安装(点击安装包打开下图页面) 第三步:科学使用,请前往下载最新工具及教程&#xff1a…

Golang 高性能 Websocket 库 gws 使用与设计(一)

前言 大家好这里是,白泽,这期分析一下 golang 开源高性能 websocket 库 gws。 视频讲解请关注📺B站:白泽talk 介绍 gws:https://github.com/lxzan/gws |GitHub 🌟 1.2k,高性能的 …

mac下010editor的配置文件路径

1.打开访达,点击前往,输入~/.config 2.打开这个文件夹 把里面的 010 Editor.ini 文件删除即可,重新安装010 Editor即可

SpringBoot 项目配置文件注释乱码的问题解决方案

一、问题描述 在项目的配置文件中,我们写了一些注释,如下所示: 但是再次打开注释会变成乱码,如下所示: 那么如何解决呢? 二、解决方案 1. 点击” File→Setting" 2. 搜索“File Encodings”, 将框…

探索 IPython %%sql 魔术:数据库交互的高效工具

探索 IPython %%sql 魔术:数据库交互的高效工具 在数据科学和分析领域,IPython 提供了一个强大的交互式环境,允许用户执行 Python 代码并与各种数据源进行交互。%%sql 魔术命令是 IPython 环境中的一个特殊命令,它允许用户直接在…

【Android】广播机制

前言 广播机制是Android中一种非常重要的通信机制,用于在应用程序之间或应用程序的不同组件之间传递信息。广播可以是系统广播,也可以是自定义广播。广播机制主要包括标准广播和有序广播两种类型。 简介 在Android中,广播(Broa…