1.什么是索引(Index)?

官方的定义是索引是一种数据结构,从生活的纬度上讲,假如将一本书比作成一张表,这本书的目录就是表中的索引(Index)。

2.索引的优势和劣势?

优势:数据量比较大时,为了快速找我们需要的数据可以使用索引,这个可以提高查询效率。

劣势:索引会占用额外的存储空间(InnoDB 索引和数据是在一起的)

   会对更新操作带来一定的复杂度(更新记录时,需要更新索引)

3.使用索引的应用场景?

索引一般应用于查询操作中,用于提高查询效率。例如 索引可以应用于如下子句的优化逻辑中。

1)on 子句

2)where 子句

3)group by 子句

4)having 子句

5)order by 子句

4.索引的分类设计?

分类维度:逻辑应用维度(主键,普通,联合,唯一,空间索引....)

     物理存储维度(聚簇索引-索引和数据存在一起,非聚簇索引-索引和数据分开存储)

     数据存储结构维度(hash,B+Tree....)

5.如何查看表中的索引?

show index from 表名;

6.如何创建索引?

1)创建表的同时创建索引(create table 表名(字段),index 索引名(字段名))

2)创建表后通过create语句创建索引(create index 索引名 on 表名(字段名))

3)创建表后通过alter语句创建索引(alter table add index 索引名(字段名))

创建普通索引案例

create index index_first_name on student(first_name);

alter table student add index index_last_name(last_name);

创建唯一索引案例

create unique index index_first_name on student(first_name);

alter student add unique index index_email (email);

创建组合(联合)索引案例

create index index_first_last on student(first_name,last_name);

alter table student add index index_first_last (first_name,last_name);

7.如何删除索引?

drop index 索引名 on 表名;

MySQL中InnoDB默认的索引存储结构是B+Tree

8.什么是B+Tree?

一种平衡多叉树,是B-Tree的Plus版,主要用于索引的存储结构,然后基于这种结构提高查询效率。

9.MySQL中的B+Tree有什么特点?

1)树中的非叶子节点只能存储索引和指针

2)树中的叶子节点存储索引和数据

3)树中的叶子节点处于相同层,并且有序,他们之间会使用双向链表连接,可以更好的支持范围查询

10.MySQL中B+Tree相对于B-Tree有什么优点?

1、一个磁盘可以存储的索引数量会更多(B+Tree的非叶子节点只存储索引和指针)

2、相同数据量的B+Tree相对于B-Tree的高度相对会比较低(因为分叉多了)

3、叶子节点之间B+Tree有双向链表的连接,可以支持快速的范围查询。

11.聚簇索引有哪些类型?

InnoDB中,一张表中只有一个聚簇索引(即主键索引),其他索引都是二级索引,在实际应用中,我们可以直接通过主键聚簇索引查询到具体记录。假如是二级索引,这个索引中存储的是索引以及主键,我们使用二级索引执行查询时,是先基于二级索引找到主键,再基于主键去查询具体记录(这个过程就叫回表查询)。

12.什么是非聚簇索引?

非聚簇索引是索引与数据是分离的,索引和数据是单独存储的。MyISAM存储引擎就是非聚簇索引。

非聚簇索引结构:

非聚簇索引的值是什么?

非聚簇索引在创建时,存储的是索引值以及索引对应的记录的地址,基于非聚簇索引查询数据时,可以先基于索引找到数据的一个地址,然后基于地址再去找查询数据。单从索引角度来说,非聚簇索引查找速度不如聚簇索引,非聚簇索引找到索引位置后还需要根据索引找到数据对应的位置。

MySQL中的索引应用的更多相关文章

  1. MySQL(五) MySQL中的索引详讲

    序言 之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下去的心态了,原因可能是由于别人的影响,觉得对于MySQL来说,知道了一些复杂的查询,就够了,但是 ...

  2. 一、MySQL中的索引 二、MySQL中的函数 三、MySQL数据库的备份和恢复 四、数据库设计和优化(重点)

    一.MySQL中的索引###<1>索引的概念 索引就是一种数据结构(高效获取数据),在mysql中以文件的方式存在.存储建立了索引列的地址或者指向. 文件 :(以某种数据 结构存放) 存放 ...

  3. MySQL中的索引详讲

    一.什么是索引?为什么要建立索引? 索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的 ...

  4. mysql 中添加索引的三种方法

    原文:http://www.andyqian.com/2016/04/06/database/mysqleindex/ 在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以 ...

  5. (转)MySQL中的索引详讲

    序言 之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下去的心态了,原因可能是由于别人的影响,觉得对于MySQL来说,知道了一些复杂的查询,就够了,但是 ...

  6. MySQL中是索引

    MySQL中是索引: --.唯一索引: 一行中的内容不能一样, create t2( id int , num int, unique weiyisuiyin (id,num) ) --唯一; --约 ...

  7. 一步一步带你入门MySQL中的索引和锁 (转)

    出处: 一步一步带你入门MySQL中的索引和锁 索引 索引常见的几种类型 索引常见的类型有哈希索引,有序数组索引,二叉树索引,跳表等等.本文主要探讨 MySQL 的默认存储引擎 InnoDB 的索引结 ...

  8. MySQL中的索引优化

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 过多的使用索引将会造成滥用.因此索引也会有它的缺点.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 ...

  9. MySQL中的索引简介

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 一. 索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能. 第一.通过创建唯一性索引,可以保 ...

  10. java面试一日一题:讲下mysql中的索引

    问题:请讲下mysql中的索引 分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质? 回答要点: 主要从以下几点去考虑 1.索引的本质是什么 2.mysql的索引分类: 3 ...

随机推荐

  1. 题解 [SCOI2007]压缩

    好题. 显然区间 dp,令 \(f_{l, r}\) 为 \([l, r]\) 之间的最短的长度.如果我们要压缩,那么就要考虑 M 与 R 的位置.由于我们大体是从左往右来转移的,所以显然我们只需要记 ...

  2. 通过 Pulsar 源码彻底解决重复消费问题

    背景 最近真是和 Pulsar 杠上了,业务团队反馈说是线上有个应用消息重复消费. 而且在测试环境是可以稳定复现的,根据经验来看一般能稳定复现的都比较好解决. 定位问题 接着便是定位问题了,根据之前的 ...

  3. 搜索(todo)

    目录 BFS 3. 最短单词路径 DFS 1. 最大连通面积 2. 矩阵中的连通分量 Backtracking 在矩阵中寻找字符串 5. 全排列 6. 含有相同元素全排列 7. 组合 8.组合求和 9 ...

  4. SQL注入、XSS

    参考视频 一.Sql注入的原因 用户输入的信息,拼接到程序中进行了执行. 一.使用Burpsuite,进行万能钥匙探索 二.使用sqlmap进行测试 三.SQL注入基础知识 Mysql 5.x数据结构 ...

  5. MySQL查询 根据时间字段的值的时分秒进行查询

    例如,查询小于等于10:30的时间 SELECT * FROM  表名WHERE DATE_FORMAT(TranslateOverTime,'%H') <= 10 AND DATE_FORMA ...

  6. ionic4 可能忽略的一些细节

    1.iOS中,页面被状态栏遮挡的问题 有的说 具体是解决是  在config.xml   配置如下代码 <preference name="StatusBarStyle"   ...

  7. [UnityShader]unity中2D Sprite显示阴影和接受阴影

    首先是效果 要让2D显示阴影,首先假设知道Unity阴影来源(shader中的ShadowCaster) 最简单的方法是,首先从官网下载Sprite-Default.Shader,查看源码 然后复制粘 ...

  8. element-ui动态表单验证

    由于项目中固定标签的数据是由后端查询回来的数组,需要进行表单验证,代码如下: <template> <div class="form"> <el-fo ...

  9. Java面向对象之什么是继承?

    继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模. extends的意思是"扩展".子类是父类的扩展. Java中类只有单继承,没有多继承!即 一个儿子只能有一个爸 ...

  10. vue中input触发方法中调用ajax,导致input失去焦点问题

    发现在vue中监控input绑定的值,调用方法时,如果方法中有调用后端接口(使用Ajax),会导致input输入框失去焦点,这样导致的问题就是每输入一个字符,就要重新聚焦一次,可通过以下方式在方法中重 ...