问题:请讲下mysql中的索引

分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质?

回答要点:

主要从以下几点去考虑

1、索引的本质是什么

2、mysql的索引分类;

3、每种分类的依据;

mysql在日常的开发中使用非常广泛,经常会提到的一句是在进行优化的时候,要对索引进行优化,那么到达什么是索引那。

索引其实是一种数据结构,建立索引的目的是为了提高查询效率。如果没有索引那么存储在磁盘中的数据(mysql中的数据归根结底是存储在磁盘中的),就需要扫描磁盘,把磁盘中的数据挨个扫描并进行比较,判断是否为需要的数据,为了提高查询的效率,增加一个索引的数据结构,在查找数据的时候先通过读取索引,找到要查找数据的主键或数据地址,然后根据找到的主键或数据地址去硬盘定位数据,这样比直接扫描磁盘要快很多。

mysql中,myIsam和nnodb两种数据引擎,底层的索引结构都是B+树。

从数据和索引是否在一起可以分为聚集索引和非聚集索引。

聚集索引

聚集索引,索引记录和数据存储在一起,inndob引擎下的主键索引便是聚集索引,其索引树的叶子节点存储的是主键和对应的行记录

非聚集索引

非聚集索引,当时是索引记录和数据是分开存储的,myIsam引擎下的索引都是非聚集索引,其索引树的叶子节点存储的是索引列和对应数据行的地址;要查询数据首先通过索引树找到对应的数据地址,然后根据地址进行查询;

innodb下的非主键索引不严格意义上来说也可以算作非聚集索引,因为非主键索引的叶子节点存储的是索引列和主键值,这里的主键值可以看作是数据地址;

从索引列是否为主键可以分为主键索引和普通索引

主键索引

主键索引,以主键建立的索引树,在inndob下必须要有主键索引,也就是必须要有主键,在建表时最好设置主键,在不设置主键的情况下,mysql会选择一个唯一性的列作为主键,如果没有唯一列则会默认生成一个自增的row_id作为主键,也就是说inndob的表肯定有主键索引,因为主键索引的叶子节点存储的是对应的行记录且仅有一份,没有主键索引就没有数据。

普通索引

普通索引,非主键的索引都叫普通索引,可以分为单列索引和联合索引(多列索引),单列索引就是一个列建立的索引;联合索引就是多个列组成的索引,联合索引就涉及索引的最左匹配原则。普通索引的叶子节点存储的是索引列和对应的主键值。在命中普通索引的情况下,找到主键值后,需要根据主键值再查找主键索引方可查询到对应的数据,而命中主键索引时则可以直接查找到数据,所以主键索引查询效率一般较高。

上面说到了索引的分类及优点,最大的优点就是提高查询效率,但也不是索引越多越好,因为索引作为一种数据结构也是要占磁盘空间的,在更新、插入、删除数据的同时也要维护索引结构会耗费时间,不能为了提高查询效率而牺牲更新操作的效率,需要合理的设置每张表的索引数量,一般5--6个为最好。

java面试一日一题:讲下mysql中的索引的更多相关文章

  1. java面试一日一题:讲下mysql中的undolog

    问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...

  2. java面试一日一题:讲下在什么情况下会发生类加载

    问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...

  3. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  4. java面试一日一题:mysql中的自增主键

    问题:请讲下mysql中的自增主键 分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置 回答要点: 主要从以下几点去考虑 1.什么自增主键 2.使用场景是什么: 3.innodb_a ...

  5. java面试一日一题:java中垃圾回收算法有哪些

    问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...

  6. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  7. java面试一日一题:binlog undolog redolog的区别

    问题:请讲下mysql中binlog.undolog.redolog三种日志的区别 分析:mysql中这三种日志很常见,也是面试中涉及比较多的方面,要理解清楚这三种日志的定位及区别: 回答要点: 主要 ...

  8. java面试一日一题:请讲下对mysql的理解

    问题:请讲下对mysql的理解 分析:该问题主要考察对mysql的理解,基本概念及sql的执行流程 回答要点: 主要从以下几点去考虑, 1.mysql的整体架构? 2.mysql中每一个组件的作用? ...

  9. java面试一日一题:mysql事务是如何实现的

    问题:请讲下mysql的事务是如何实现的 分析:该问题主要考察对事务的理解及实现方式: 回答要点: 主要从以下几点去考虑, 1.对事务的概念的理解? 2.事务的实现方式? 讲到mysql的事务,很快可 ...

随机推荐

  1. 用Vue3构建企业级前端应用,TS能让你更轻松点

    摘要:Vue 3已经发布有一段时间了,到底有哪些新特性值得关注,如何用它构建企业级前端项目,怎样快速上手Vue 3?本篇文章将对此进行详细讲解. 前言 工欲善其事,必先利其器 --<论语> ...

  2. Hexo的详细搭建过程——小白的血泪经历QAQ

    Hexo的详细搭建过程 环境要求: node.js git 这里提供Centos8.2下的安装过程: dnf module list nodejs dnf module install nodejs: ...

  3. c++ string类使用及用string类解决整行字符串输入

    下面随笔给出c++ string类使用及用string类解决整行字符串输入. string类 使用字符串类string表示字符串 string实际上是对字符数组操作的封装 string类常用的构造函数 ...

  4. POJ-2387(原始dijkstra求最短路)

    Til the Cows Come Home POJ-2387 这题是最简单的最短路求解题,主要就是使用dijkstra算法,时间复杂度是\(O(n^2)\). 需要注意的是,一定要看清楚题目的输入要 ...

  5. 从客流统计到营销赋能,Re-ID加速实体商业数字化转型 | 爱分析洞见

    2020年中国实体商业受到突发疫情的重大影响.以危机为契机,实体商业加速数字化转型,利用创新应用服务自身业务.在此阶段,基于Re-ID(Person Re-identification,即行人再识别) ...

  6. .net 开源模板引擎jntemplate 教程:基础篇之语法

    一.基本概念 上一篇我们简单的介绍了jntemplate并写了一个hello world(如果没有看过的,点击查看),本文将继续介绍jntemplate的模板语法. 我们在讲解语法前,首先要了解一下标 ...

  7. Shell脚本控制docker容器启动顺序

    1.遇到的问题 在分布式项目部署的过程中,经常要求服务器重启之后,应用(包括数据库)能够自动恢复使用.虽然使用docker update --restart=always containerid能够让 ...

  8. mysql数据库的数据备份,以及开启日志

    导出数据: location代表需要保存的数据文件的位置,默认保存在 C:\ProgramData\MySQL\MySQL Server 5.7\Data(Windows10系统位置,其他系统位置自行 ...

  9. Solon 框架详解(十一)- Solon Cloud 的配置说明

    Solon 详解系列文章: Solon 框架详解(一)- 快速入门 Solon 框架详解(二)- Solon的核心 Solon 框架详解(三)- Solon的web开发 Solon 框架详解(四)- ...

  10. python学习之基础内容

    python基础内容① 什么是python? -一种计算机语言,计算机语言分为 -高级语言:python.java.Ruby.C#.C++...... -基础语言:C语言.汇编 -计算机可以直接执行基 ...