数据库:索引

数据库:索引 什么是数据库索引?数据库索引是对数据库表中一列或多列进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。数据库索引就像书的目录,能加快数据库的查询速度。索引分为聚簇索引(聚集索引)和非聚簇

大家好,又见面了,我是你们的朋友全栈君。

什么是数据库索引?

数据库索引是对数据库表中一列或多列进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。数据库索引就像书的目录,能加快数据库的查询速度。索引分为聚簇索引(聚集索引)和非聚簇索引(非聚集索引)。聚簇索引是按照数据存放的物理位置为顺序的,聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。索引可以减少为返回结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表的数据完整性。

 

如果没有索引

Table Scan:

页(Page):8KB,数据库文件存储的基本单位(即使读取一行,也要加载一页)。存储表数据(有可能是多行)或索引数据,以及其他系统数据。

区(Extent):8个连续的页。以64KB为届:分配新区/页。(TRUNCATE:清空整个区)

堆(Heap):没有聚集索引的页

Index Allocation Map:索引分配映射

<span role="heading" aria-level="2">数据库:索引 <span role="heading" aria-level="2">数据库:索引

 

索引的语法

CREATE [index_type] INDEX index_name ON table_name(column_1[, column_2, ...])
DROP INDEX table_name.index_name 

理解:索引和表分离。

因为SELECT中的WHERE clause可以依赖表有多个字段,所以一张表就可以建多个索引,多种索引。

而且,同一个列上也可以建多个索引(但应该尽力避免)

 

聚集索引

聚集索引是根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引列。因为数据行本身只能按一个顺序排序。只有当表包行聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有索引,则其数据存在一个成为堆的无序结构中。

 

非聚集索引

非聚集索引具有独立于数据行的结构。非聚集索引包行非聚集索引键值,并且每个键值顶部都有指向包行该键值的数据行的指针。从非聚集索引中的索引行指向数据行的指针成为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。

 

<span role="heading" aria-level="2">数据库:索引 <span role="heading" aria-level="2">数据库:索引

 

 

创建索引的注意事项应该创建索引的这些列具有以下特点

1、在经常需要搜索的列上。可以加快搜索的速度。

2、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

3、在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。

4、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的的排序,加快排序查询的时间

5、在经常使用WHERE子句的适合

 

不应该创建索引的列:

1、对于那些在查询中很少使用或者参考的列不应该创建索引。既然这些这些列很少使用到,因此有索引或无索引并不能提高查询速度。相反,由于增加了索引,反而降低了系统维护速度还增大了空间需求。

2、快速开发平台对于那些只有很少数据值的列也不应该增加索引。

3、对于那些定义为text,image,和bit数据类型的不应该增加索引。因为这种列的数据量要么相当大,要么取值很少,不利于使用索引 。

4、当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的,当增加索引时,会提高检索性能,但是会降低修改性能。

文章转载自:快速开发平台– 云微平台
地址:https://www.hocode.com/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155102.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • WTL介绍

    WTL介绍

  • 如果要将二叉树{16,14,10,8,7,9,3}_二叉分枝

    如果要将二叉树{16,14,10,8,7,9,3}_二叉分枝有一棵二叉苹果树,如果树枝有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共 N 个节点,编号为 1 至 N,树根编号一定为 1。我们用一根树枝两端连接的节点编号描述一根树枝的位置。一棵苹果树的树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最多能留住多少苹果。这里的保留是指最终与1号点连通。输入格式第一行包含两个整数 N 和 Q,分别表示树的节点数以及要保留的树枝数量。接下来 N−1 行描述树枝信息,每行三个整数,前两个是它连接的节点的编号,第三个数是这根树枝上

  • 工作日志2014-08-04

    工作日志2014-08-04

  • 多模态学习「建议收藏」

    多模态学习「建议收藏」作者:张致远#mermaid-svg-bqinfdlcry278edQ.label{font-family:’trebuchetms’,verdana,arial;font-family:var(–mermaid-font-family);fill:#333;color:#333}#mermaid-svg-bqinfdlcry278edQ.labeltext{fill:#333}#mermaid-svg-bqinfdlcry278edQ.noderect,#mermaid-svg-..

  • 主流自动化运维工具支持的功能(运维自动化工具排行)

    主流的自动化运维工具有3种:Puppet、Saltstack和Ansible,用的最多的还是Ansible。Puppet:官网:www.puppetlabs.com,基于rubby开发,C/S架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。分为社区版(免费)和企业版(收费),企业版支持图形化配置。Saltstack:官网:https://saltsta…

  • Java全局变量(成员变量)和局部变量的区别

    Java全局变量(成员变量)和局部变量的区别前言:学习变量之前若对static修饰符不理解,理解可能比较吃力。一、下面先大致介绍java中static关键字的作用1:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。2:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。3:简单来说就是被static修饰后的值可以直接类名.值进行引用,而无需new一个对象进行调用4.static特点static翻译为“静态”所有static关键字修饰的都是类相关的,类级别的。所有static修饰的,都是采用“

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号