PostgreSQL11 | 索引

news2024/9/24 1:22:32

截止到上一篇《PostgreSQL11 | 查询数据》属于pgsql的基础部分就算是都总结完了,从这一篇(第9章)开始一直到本专栏最后一篇文章(第14章)都是进阶部分,sql量会减弱,抽象的概念会越来越多,前面几章因为sql实操多,基本和原书一致,在后面的几章,原书的内容会大致缩减到一半,另一半会适宜的添加来源自己见解、b站视频、论坛文章和百度百科等多种渠道信息的总结。

索引

索引,在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

目录

索引

索引的用途

索引的组成

索引的特点

索引的结构

索引的种类

索引的设计原则

pgsql索引

创建索引

图形化创建索引

sql语句创建索引

重命名索引

图形化操作

SQL语句操作

删除索引

图形化操作 

SQL语句操作 

PostgreSQL 11 新特性 1——创建索引时支持INCLUDE方式


索引的用途

为数据库数据建立合适的索引可以加快查找数据的速度,在少量数据下,普通数据库和有索引的数据库的查询速度基本一样,但在庞大数量级的数据下,查找一条记录所耗费的时间则会有很大的差距。

比如下面这个来自b站的教学视频中所展示的

图1

(原视频中是mysql数据库,我们只理解效果和原理)

我们可以看到,在没有建立索引之前,查询第五百万条数据(庞大数据中的最后一条数据)所使用的时间是1.477s,而在建立索引后,所用时间仅需0.01s

那么也就是说,要想快,就需要建立一个合适的索引。不仅可以加快查询速度,还可以减少磁盘的i/o次数,因为数据在物理上也是连续的。

索引的组成

索引键值、对应的指针或rowid(指示存储位置)

索引的特点

为了快速查找,索引键值是有序的

优点:

  1. 通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。
  2. 可以大大加快数据的查询速度。
  3. 加速表和表之间的连接。
  4. 在使用分组和排序子句进行数据查询时,可以有效减少分组和排序的时间。

缺点:

  1. 创建索引和维护索引要耗费时间。且随着数据量的增加而增加。
  2. 索引需要占用磁盘空间。
  3. 当表中的数据进行增加、删除或修改时,所以也要动态维护,降低了数据的维护速度。
图2

从 图2 中也可以看出,为500w条数据创建索引,索引占用了 90,112kb 的空间。

图3

 而建立索引时,也耗费了 9.722s

索引的结构

为了实现对索引键值的快速查找,索引并不采用两列表结构
常用的结构:B+树、哈希hash、位图

B+树:适合处理那些能够按照顺序存储的数据

哈希hash:只能处理简单的等于比较

具体可以查看这篇文章

索引的种类

聚簇索引、非聚簇索引

聚簇索引:物理排序,在索引上按顺序,数据存放也按顺序排
非聚簇索引:逻辑排序,仅索引排序,数据无序存放

唯一值索引、非唯一值索引:索引键值是否允许重复

单列索引与复合索引:单列与多列

反键索引、函数索引、倒排索引....
 

索引的设计原则

索引设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍。

设计索引时,应该考虑以下准则:

  1. 索引并非越多越好,一个表中如有大量的索引,不但占用磁盘空间将增大,而且会影响 INSERT、DELETE、UPDATE 等语句的性能,因为当表中的数据更改的同时,索引也会进行调整和更新。
  2. 避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。
  3. 数据量小的表最好不要使用索引,由于数据较少,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
  4. 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低更新速度。
  5. 当唯一性是某种数据本身的特征时,指定唯一索引能够确保定义的列的数据完整性,提高查询速度。
  6. 在频繁进行排序或分组 (进行 GROUP BY或ORDER BY 操作)的列上建立索引如果待排序的列有多个,可以在这些列上建立组合索引。

pgsql索引

创建索引

图形化创建索引

对于一个已建表创建索引,图形操作为:

 

sql语句创建索引

使用 CREATE INDEX 语句在已经存在的表中创建索引,基本语法结构为:

CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEX index_name

ON table_name (col_name[length],...)[ASC | DESC]

在创建索引前,首先要创建数据表,SQL 语句如下:

create table book
(
	bookid int not null,
	bookname varchar(255) not null,
	authors varchar(255) null,
	info varchar(255) null,
	comment varchar(255) null,
	year_publication date not null
);

1.创建普通索引

只用于加快查询速度,没有唯一性约束的限制

例:在book表上的bookname字段建立名为bknameindex的普通索引

create index bknameindex on book(bookname);

2.创建唯一索引

用于减少查询索引列操作的执行时间,尤其是对于庞大的数据表。要求索引值必须的唯一的,允许有空值。

例:在 book 表的 bookId 字段上建立名称为 unigididx 的唯一索引,SQL语句如下:

create unique index uniqididx on book(bookid);

3.创建单列索引

单列索引是在书籍表中某一字段上创建的索引,一个表中可以创建多个单列索引。上面两个索引也是单列索引。

例:在 book 表的 comment 字段上建立单列索引,SQL 语句如下:

create index Bkcmtidx on book(comment);

4.创建组合索引

组合索引是在多个字段上创建一个索引

例:在 book 表的 authors 和 info 字段上建立组合索引,SQL 语句如下:

create index bkauandinfoidx on book(authors,info);

重命名索引

索引创建后可以根据需要对数据库中的索引进行重命名操作,常见的方法包括在对象浏览器中修改和使用SQL语句修改。

图形化操作

SQL语句操作

例:把上面修改的bk再重命名回去

alter index public.bk rename to bkauandinfoidx;

删除索引

图形化操作 

 

SQL语句操作 

删除索引的格式为:

DROP INDEX index_name;

例:删除 book 表中名称为 bkauandinfoidx 的组合索引,SQL 语句如下:

drop index bknameindex;

PostgreSQL 11 新特性 1——创建索引时支持INCLUDE方式

有关 PostgreSQL 11 新特性 1——创建索引时支持INCLUDE方式 的相关内容请通过原教材《postgresql11从入门到精通》(清华大学出版社)第238页开始了解,PostgreSQL 11 新特性 2——执行并创建索引 在原书239页,综合案例—创建索引 在原书240页,常见问题及解答在原书242页经典习题在原书242页,该部分作为自由了解范围请购买原著自行学习,感谢理解。

作者的话(Alvin):

本文根据原书《PostgreSql11 从入门到精通》(清华大学出版社)第9章总结整理,为提问与解答可以帮助更多人,本博客模拟GitHub的issue方案,所以私信已关,有问题请在评论区直接指正与提问,允许转发、复制或引用本文章,必须遵守开源法则注释来源与作者,感谢您的阅读

知识来源:

1.《PostgreSql11 从入门到精通》(清华大学出版社)第9章

2.【索引的使用】https://www.bilibili.com/video/BV1jR4y1o7jM?vd_source=6324e6978c492079d2e70fc2e94674d0

索引的使用

3.【数据库原理与应用——索引】https://www.bilibili.com/video/BV1hS4y1c7Uf?vd_source=6324e6978c492079d2e70fc2e94674d0

数据库原理与应用——索引

4.【【MySQL】燃到爆的索引讲解❁从未见过如此燃的技术类视频】https://www.bilibili.com/video/BV1sQ4y1K7tF?vd_source=6324e6978c492079d2e70fc2e94674d0

 【MySQL】燃到爆的索引讲解❁从未见过如此燃的技术类视频

5.【数据库索引的结构】
https://blog.csdn.net/qq_16681169/article/details/50787624

 数据库索引的结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字识别问题

文章目录 6.1 MNIST数据处理6.2.1 训练数据6.2.2 变量管理6.3.1 保存模型6.3.1 加载计算图6.3.1 加载模型6.3.2 导出元图 6.1 MNIST数据处理 在直接在第6章的目录下面创建文件 compat.v1.是tensorflow2.x的语法,全部删掉 删除compat.v1.后的代码 # -*- coding: …

【SCI一区】考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

学术必备的21个论文网站,建议收藏!

1、综合型论文网站(国内) (1)知网 介绍:国内知名度最高的网站,拥有上亿篇各种论文期刊,包含中国学术文献、 外文文献、学位论文、报纸、会议、年鉴、工具书等各类资源统一检索、统一导 航、…

第四章 图像的形态学操作

文章目录 前言一、阈值控制二、腐蚀与膨胀1.腐蚀2.膨胀3.形态学操作 总结 前言 前面讲解了图像基础理论、图像的变换以及图像滤波等操作,本章,将会介绍图像的形态学操作。 图像的形态学指的是一组数学方法和工具,用于图像分析和处理。形态学…

(7)Qt---文件IO

目录 1. QFileDialog 文件选择对话框** 2. QFileInfo 文件信息类** 3. QFile 文件读写类*** 4. UI与耗时操作** 5. QThread 线程类 5.1 复现阻塞 5.2 新建并启动子线程 5.3 异步刷新 5.4 停止线程 1. QFileDialog 文件选择对话框** 操作系统会提供一个统一样式的文件选择对话框…

从本地到云端:豆瓣如何使用 JuiceFS 实现统一的数据存储

豆瓣成立于 2005 年,是中国最早的社交网站之一。在 2009 到 2019 的十年间,豆瓣数据平台经历了几轮变迁,形成了 DPark Mesos MooseFS 的架构。 由机房全面上云的过程中,原有这套架构并不能很好的利用云的特性,豆瓣需…

少林派问题汇总

少林派问题汇总: Q: A:缺少bmodel,没有指定bmodel的路径,测试图片不在同一文件路径下 复制过来就解决了 Q: docker容器下运行./install_lib.sh nntc会rm不到文件怎么回事? A:文件已经被删除 Q: 我将pytorch的模型用export工具转换成.torch…

聚焦丨酷雷曼荣列XRMA联盟成员单位

自“元宇宙”概念兴起之初,酷雷曼VR所属北京同创蓝天云科技有限公司就积极布局、探索和实践。2022年12月,酷雷曼VR成功加入虚拟现实与元宇宙产业联盟(XRMA),正式被接纳为联盟成员单位,意味着酷雷曼公司将进…

详细版易学版TypeScript - 元组 枚举详解

一、元组(Tuple) 数组:合并了相同类型的对象 const myArr: Array<number> [1, 2, 3]; 元组(Tuple):合并了不同类型的对象 // 定义元组时就要确定好数据的类型&#xff0c;并一一对应 const tuple: [number, string] [12, "hi"]; // 添加内容时&#xff0c;不…

代码随想录算法训练营day35 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

代码随想录算法训练营day35 | 860.柠檬水找零&#xff0c;406.根据身高重建队列&#xff0c;452. 用最少数量的箭引爆气球 860.柠檬水找零406.根据身高重建队列452. 用最少数量的箭引爆气球 860.柠檬水找零 教程视频&#xff1a;https://www.bilibili.com/video/BV12x4y1j7DD/…

3.SpringBoot开发实用篇

SpringBoot开发实用篇 ​ 开发实用篇中因为牵扯到SpringBoot整合各种各样的技术&#xff0c;由于不是每个小伙伴对各种技术都有所掌握&#xff0c;所以在整合每一个技术之前&#xff0c;都会做一个快速的普及&#xff0c;这样的话内容整个开发实用篇所包含的内容就会比较多。各…

推荐系统综述

这里写目录标题 推荐系统架构1、传统推荐方式1.1 基于内容推荐&#xff08;Content-Based recommendation&#xff0c;CB&#xff09;1.2 协同过滤推荐&#xff08;Collaborative Filtering recommendation&#xff0c; CF&#xff09;1.2.0 UserCF举例&#xff1a;1. 2. 1 基于…

window-2016服务器;服务——活动目录

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

OpenCL编程指南-2.1HelloWorld

在windows下编写HelloWorld 按照前面文章搭建好OpenCL的环境https://blog.csdn.net/qq_36314864/article/details/130513584 main函数完成以下操作&#xff1a; 1&#xff09;在第一个可用平台上创建OpenCL上下文 2&#xff09;在第一个可用设备上创建命令队列 3&#xff09;…

第二期 | ICASSP 2023 论文预讲会

ICASSP 2023 论文预讲会是由CCF语音对话与听觉专委会、语音之家主办&#xff0c;旨在为学者们提供更多的交流机会&#xff0c;更方便、快捷地了解领域前沿。活动将邀请 ICASSP 2023 录用论文的作者进行报告交流。 ICASSP 2023 论文预讲会邀请到清华大学人机语音交互实验室&…

单细胞跨模态分析综述

单细胞技术的最新进展使跨模态和组织位置的细胞高通量分子分析成为可能。单细胞转录组数据现在可以通过染色质可及性、表面蛋白表达、适应性免疫受体库分析和空间信息进行补充。跨模态单细胞数据的可用性越来越高&#xff0c;推动出新的计算方法&#xff0c;以帮助科学家获得生…

图的遍历——深度优先搜索(DFS)与广度优先搜索(BFS)(附带C语言源码)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️数据结构与算法】 学习名言&#xff1a;天子重英豪&#xff0c;文章教儿曹。万般皆下品&#xff0c;惟有读书高——《神童诗劝学》 系列文章目录 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章…

mysql数据迁移与同步常用解决方案总结

目录 一、前言 二、数据迁移场景 2.1 整库迁移 2.2 表数据迁移 2.3 mysql版本变更 2.4 mysql数据迁移至其他存储介质 2.5 自建数据到上云环境 2.6 mysql数据到其他国产数据库 三、数据库物理迁移实施方案 3.1 数据库物理迁移概述 3.1.1 物理迁移适用场景 3.1.2 物理…

杂记 2023.5.10

目录 韦伯和斯托亚科维奇是谁&#xff1f; 介绍一下kali FastDFS和Sentinel是什么&#xff1f; Inferno 找工作的影响因素 1. 背景&#xff1a; 2. 学习过程&#xff1a; 2.1 计算机基础&#xff1a; 2.2 语言&#xff1a; 2.3 数据库等&#xff1a; 2.4 JVM&#…

月薪17k需要什么水平?98年测试员的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…