百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

数据分析所需了解的索引知识,一文带你纵览全貌

toyiye 2024-08-19 22:35 7 浏览 0 评论

数据库的每一个知识点真要详细介绍的话都可以写成一本小册子,索引也不例外,但没那个必要。作为数据分析师或非数据库开发人员,所需了解的仅仅是下面这些知识点。


什么是索引


索引是为了加速对数据库表中数据行的检索而创建的一种分散的存储结构。这话有些人可能看着拗口,但如果将索引比喻成字典的目录那就很好理解了。借助对目录的了解可以加深我们对索引的理解。

上表所列的是二者的共性特点,理解这些后就对索引的优缺点有了一个大致的认识。


索引原理


索引按照存储结构类型可主要分为Btree(也称B树)和Hash两大类型,其中Btree最为常用。Mysql数据库默认的引擎是InnoDB引擎,该引擎的表默认创建的是Btree索引。所以,主要掌握该索引就够了。

Btree是树结构索引,它的原理就是通过为表创建树形状的存储结构从而加快查询效率。它经历了二叉树、平衡树、B-树、B+树的优化历程。掌握了这一变化历程,也就掌握了B树索引的原理。

我们以斐波那契数列的前8位数[1,2,3,5,8,13,21]作为索引值,看看不同树结构下会是怎样的存储结构。


(1)二叉树

下图的存储结构就是二叉树,按照这个结构,我们查询某一个数字最多只需要5次,也就是树的高度。

二叉树具有如下特点:

  • 每个结点都包含一个元素以及n个子树,0≤n≤2;
  • 左子树的值要小于父结点,右子树的值要大于父结点。

但二叉树存在着一个缺点,随着后续的数字添加进来,会全部添加到右子树,该树就会严重右偏,退化成差不多一个链表了,查询效率也就大大降低了。


(2)平衡树

平衡树是一种特殊的二叉树,它是为了解决二叉树偏科的问题而诞生的。它除了具备二叉树的两个特性外,还具有左右两个子树高度差不超过1的特性,并且左右两个子树都是一棵平衡二叉树。

但平衡树中每个节点只能有一个值,在数据量大的情况下会需要多个节点,树的深度很很大,这就会大量增加和磁盘的IO次数,影响查询性能。


(3)B-树

B-树的节点就可以不止有一个数了,除了有键值,还存有数据。相比平衡树,它的形状属于更矮更胖,与磁盘的IO次数就会大大降低。

但也正是由于节点中包含了数据,导致每次从磁盘读入到内存的键值数就会降低,在这种情形下还是会一定程度增加磁盘的IO次数,从而影响查询效率。


(4)B+树

B+树是对B-树的优化,所有的非叶子节点只存储键值信息,所有数据都存在叶子节点中,叶子节点之间都有一个链指针。

由于数据全部存储在叶子节点中,非叶子节点只包含键值,每次读入内存的键值相对B-树来说就会增加,从而降低磁盘IO次数、提升查询效率。

这也是为什么目前索引均主要是采用B+树结构的原因。


索引类型


索引一般可分为普通索引、唯一索引、主键索引、组合索引和全文索引五类。


(1)普通索引

这是最基本的索引,没有任何限制,如下是常用的普通索引增删查改方式。

create index indexname on test_one(column_one);--建立索引
alter table test_one add index indexname(column_one);--建立索引
drop index indexname on test_one;--删除索引
show index from test_one;--查看表的索引
select * from information_schema.statistics where table_schema='test_one';--查看数据库的索引


(2)唯一索引

与普通索引类似,不同的就是索引列值必须唯一,但允许有空值。例如,可以对用户的身份证号码字段建立唯一索引。关于它的相关语句就是需要添加unique字段,仅以创建为例,其它以此类推。

create unique index indexname on test_one(column_one);--建立索引


(3)主键索引

主键索引也称聚集索引,它与其它索引的区别在于其叶子节点存放的数据是一整行数据,而其它索引存放的只是具体的某一个数据。

如果表在创建时未定义主键,MySQL会取第一个唯一索引而且只含非空的列作为主键,并用它作为聚集索引。如果没有这样的列,就会就自动产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚集索引。当然,在表创建好之后,也可通过指定主键来创建主键索引。

alter table test_one add primary key(column_one);


(4)组合索引

这是指在多个字段上创建的索引,但要注意只有在查询条件中使用了创建索引时的第一个字段,组合索引才会被使用。

alter table test_one add index indexname(column_one,column_two);


(5)全文索引

全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。例如,对备注信息就可以建立全文索引。

alter table test_one add fulltext indexname(column_one);


注意事项


数据分析师更多地是在写查询SQL时使用索引,这时需注意以下这些细节:

  • 以%开头的like查询无法使用索引;
  • 数据类型出现隐式转换时无法使用索引;
  • 不满足最左原则的复合索引查询无法使用索引;
  • or分隔开的条件中若有一列没有索引,则涉及到的索引都无法使用;
  • 在索引列使用函数或进行运算的查询无法使用索引;
  • not in和<>的查询无法使用索引。


结语


文中所介绍的索引知识点,对于数据分析师了解索引内容而言是足够了的。但也毕竟只是在广度上做了介绍,就有如限定了考试范围,而在有些地方的深度介绍还不够,这就需要每个人结合自身实际情况去查漏补缺了!

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码