数据库索引

2023-09-21 15:25:12

一.索引的引用

索引类似于一本书的目录,可以根据页码更快的查找到内容。索引可以加快访问数据库的速度

二.索引的分类

1.按表的列属性分类

(1).普通索引:最基本的索引,没有任何限制;

(2).唯一索引:索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一;

(3).主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;

(4).组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;

(5).全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,mysqlMyISAM支持全文索引而InnoDB不支持;

2.按数据结构分类

MySQL存储引擎InnoDB,MyISAM和Memory分别支持的索引类型

 InnoDBMyISAMMemory
B树YesYesYes
HashNoNoYes
FullTextYesYesNo

B树:基于平衡二叉树,默认使用的索引类型

B- 叶子节点无水平指针
B+ 叶子节点有水平指针,可以方便范围查询
B* 枝节点有水平指针,mysql当前默认

R树:R树是B树在高维空间的扩展,是一棵平衡树

Hash:基于哈希表实现,只有精确匹配索引所有列的查询才有效。

FullText:基于相似度的查询,而不是精确数值比较。

GIS:以较小的数据量管理大量数据的查询,从而提高空间查询的效率和空间定位的准确性。

3.按存储结构分类

(1).聚集索引(唯一性):

        MySQL 会自动选择主键作为聚集索引列,没有主键会选择唯一键,如果都没有会生成隐藏的.
        MySQL进行存储数据时,会按照聚集索引列值的顺序,有序存储数据行
        聚集索引直接将原表数据页,作为叶子节点,然后提取聚集索引列向上生成枝和根

(2).辅助索引(多个):

        提取索引列的所有值,进行排序
        将排好序的值,均匀的存放在叶子节点,进一步生成枝节点和根节点
        在叶子节点中的值,都会对应存储主键ID

辅助索引细分还可以分为:唯一索引,单列辅助索引,联合索引

(3).聚集索引和辅助索引的区别

表中任何一个列都可以创建辅助索引,在你有需要的时候,只要名字不同即可
在一张表中,聚集索引只能有一个,一般是主键.
辅助索引,叶子节点只存储索引列的有序值+聚集索引列值.
聚集索引,叶子节点存储的时有序的整行数据.
MySQL 的表数据存储是聚集索引组织表,辅助索引查询表。
注:mysql的查询过程就是通过辅助索引找到主键索引的id号,再通过主键索引查数据行

三.索引的命令操作

查询索引 
desc city;
PRI   ==> 主键索引 
MUL   ==> 辅助索引
UNI   ==> 唯一索引 

mysql> show index from city\G

创建索引

单列的辅助索引:
mysql> alter table city add index idx_name(name);

多列的联合索引:
mysql> alter table city add index idx_c_p(countrycode,population);

唯一索引: 
mysql> alter table city add unique index uidx_dis(district);

mysql> select count(district) from city;
mysql> select count(distinct district) from city;

前缀索引
mysql> alter table city add index idx_dis(district(5));


删除索引 
mysql> alter table city drop index idx_name;

更多推荐

应急响应LINUX&Windows

应急响应LINUX&Windowslinux文件名说明/etc/passwd用户信息文件/etc/crontab定时任务文件/etc/anacrontab异步定时任务文件/etc/rc.d/rc.local开机启动项/var/log/btmp登录失败日志,使用last命令查看/var/log/cron定时任务执行日志/

内存管理之虚拟内存

本篇遵循内存管理->地址空间->虚拟内存的顺序描述了内存管理、地址空间与虚拟内存见的递进关系,较为详细的介绍了作为在校大学生对于虚拟内存的理解。内存管理引入RAM(内存)是计算机中非常重要的资源,由于造价的昂贵,我们家用的计算机一般是8/16G。对于如此紧俏的资源我们当然需要对它好好管理,尽力做到不浪费,高效压榨它的每

助力工业物联网,工业大数据之服务域:Shell调度测试【三十三】

文章目录知识点07:Shell调度测试知识点08:依赖调度测试知识点09:Python调度测试知识点10:Oracle与MySQL调度方法知识点11:大数据组件调度方法知识点07:Shell调度测试目标:实现Shell命令的调度测试实施需求:使用BashOperator调度执行一条Linux命令代码创建#默认的Airf

TorchLens--可视化任何PyTorch模型

0.简介PyTorch是一个深度学习框架,它使用张量(tensor)作为核心数据结构。在可视化PyTorch模型时,了解每个张量运算的意义非常重要。张量运算作为神经网络模型中的基本操作。它们用于处理输入数据、执行权重更新和生成预测结果。同时张量运算还用于计算损失函数。损失函数衡量了模型预测与真实标签之间的差异。通过使用

docker network

一、默认的三种网络模式:Bridge模式:这是Docker默认创建的网络模式。在Bridge模式下,Docker会为每个容器创建一个虚拟网络接口,并分配独立的IP地址。容器之间可以相互通信,而且可以通过端口映射让容器内部的服务可以通过主机的IP地址和端口进行访问。Host模式:在Host模式下,容器与主机共享同一个网络

代码随想录算法训练营第46天| 单词拆分,背包问题总结

139.单词拆分给你一个字符串s和一个字符串列表wordDict作为字典。请你判断是否可以利用字典中出现的单词拼接出s。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例1:输入:s=“leetcode”,wordDict=[“leet”,“code”]输出:true解释:返回true因为“le

内网隧道代理技术(二十七)之 DNS隧道介绍

DNS隧道介绍DNS协议介绍域名系统(DomainNameSystem,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转

Linux磁盘挂载及扩容操作

Linux磁盘扩容操作全介绍1.新增磁盘分区后挂载至新建/data目录下1.1新增磁盘打开Vmware右键需要添加磁盘的虚拟机,点击设置,选择磁盘添加即可,这里我新增了一块20G的磁盘在当前虚拟机下;fdisk-l#列出指定的外围设备的分区表状况#列出所有可用块设备的信息,而且还能显示他们之间的依赖关系#可以看到新增磁

2023:生成式AI与存储最新发展和趋势分析(下)

1.存储新发展概述近两年存储领域最大的里程碑事件应该是闪存赢得过半市场,Gartner连续几个季度的市场分析数据中也多次都确认了这一点,固态存储取代机械硬盘的趋势不可逆转。在这一大背景下,有三个新发展方向日益引起更多关注,分别是存储新介质,可计算存储(存算一体)和进一步的极致性能追求。2.介质Intel曾经用傲腾推动了

SpringMVC学习笔记——2

SpringMVC学习笔记——2一、SpringMVC的拦截器1.1、拦截器Interceptor简介1.2、拦截器快速入门1.3、拦截器执行顺序1.4、拦截器执行原理二、SpringMVC的全注解开发2.1、spring-mvc.xml中组件转化为注解形式2.1.1、消除spring-mvc.xml2.1.2、消除w

Kubernetes学习篇之对象

Kubernetes学习篇之对象文章目录Kubernetes学习篇之对象前言期望状态对象规约(spec)对象状态(status)描述对象创建对象字段验证前言对象是k8s系统中持久化的实体,k8s中用这些实体表示系统的状态,该博客是从k8s官网消化吸收后总结提炼的期望状态k8s的对象是你期望k8s达到的状态,k8s会逐渐

热文推荐