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. vs修改默认端口

    1.右键项目属性进去修改 2.,用txt打开sln解决方案,框框中的就是你当前的端口号

  2. 【最新最新】mac pro 安装扩展imagick 最新总结

    近期在mac上做相关开发,关于验证码图片如果没装imagick扩展会报 GD with FreeType or ImageMagick PHP extensions are required.等错误 ...

  3. 桌面应用(.exe)设置窗口默认最大化、全屏(electron)

    设置窗口默认最大化.全屏(electron) 一.默认最大化 win = new BrowserWindow({show: false}) win.maximize() win.show() 二.默认 ...

  4. Windows 干净启动

    1. 卸载设备中全部的第三方反病毒软件与系统优化软件 (例如 360.腾讯电脑管家.鲁大师等).2. 按 "Windows 徽标键+R",输入 "msconfig&quo ...

  5. react 01基础 样式

    一,react 特点 1. 声明式设计 2.虚拟dom 3.jsx 4.组件化,模块化 5.单向数据流 二,脚手架 Create React App npm i -g create-react-app ...

  6. FPGA MIG调试bug(二)

    目标器件:复旦微FPGA:JFM7K325T8FCBGA676(对标Xilinx Kintex-7系的XC7K325T) 工程背景:送入FPGA的外部时钟为差分时钟,时钟送入FPGA后,经过PLL输出 ...

  7. 【C学习笔记】day3-3 编写程序数一下 1到 100 的所有整数中出现多少个数字9

    #include <stdio.h> int main() { int cou=0; for (int i = 1; i <= 100; i++) { if (i % 10 == 9 ...

  8. vue框架2

    插值语法 mvvm演示 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  9. FMC子卡设计资料原理图:FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡

    FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡 一.产品概述 ADRV9002 是一款高性能.高线性度.高动态范围收发器,旨在针对性能与功耗系统进行优化.该设备是可配置的,非常适合要 ...

  10. call, apply,bind的区别与用法

     call, apply,bind的区别            相同点:都可以用来改变this指向           不同点:           call, apply:传参方式不同:       ...