2020-05-29 15:38:27

一、索引的优点

1、能大大减少服务器需要扫描的数据量。
2、帮助服务器避免排序和临时表。
3、将随机io变成顺序io。

二、索引的用处

  • 能够快速匹配where条件对应的数据行。

  • 从考虑中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引。

图1

图2

由上图1可以看出,如果建立了索引但是因为数据量较小也有可能不走索引,由图2可以看出如果建立了多个索引 mysql优化器会在这些索引中选择查询最少行的索引。

  • 如果数据库表具有多列索引,数据库优化器可以使用任何列的索引最左前缀来查找行。

例如,如果在(col1,col2,col3)上有三列索引(组合索引),则在(col1),(col1,col2)和(col1,col2,col3)上有索引搜索功能

  • 当有表连接的时候,从其他表检索行数据。
  • 查找特定索引列的min和max值。

下面用同一个sql语句,图一使用的索引,图二去掉了索引,显然第一个走了索引,因为在innodb myisam 两种执行引擎下索引的结构都为b+tree,因此可以直接在有序的索引结构中获取最大值和最小值所对应的主键id,然后进行回表,查找到对应的值。

注:只有主键索引的叶子节点中才会存储行数据,普通索引在叶子节点中值存储对应的主键值;

图1:gender建立了对应的索引

图2:gender去除了对应的索引

  • 如果排序或分组时在可用索引的最左前缀上完成的,则对表进行排序和分组

  • 在某些特定的情况下,是不需要查询整行数据来检索值。

当查询的列为主键id时,只需要通过普通索引进行查询就可以,因为普通索引的叶子节点存储的为主键id,这时不需要进行回表;因为已经检索到需要的主键列,这就是所谓的覆盖索引。

  • 当有多个索引列可以用来检索时  mysql优化器会自动选择最短的长度的索引来检索行。

在表中建立了以下的索引  其中绿色为组合索引:

其中id为int    age 和 score为smallint  mysql优化器会自动选择最短的索引进行检索;

当把age的数据类型改成bigint后   mysql选择了score;

Mysql索引的基本知识和用处的更多相关文章

  1. mysql索引的一些知识

    一.MySQL索引类型 mysql里目前只支持4种索引分别是:full-text,b-tree,hash,r-tree b-tree索引应该是mysql里最广泛的索引的了,除了archive基本所有的 ...

  2. 来了解一下Mysql索引的相关知识:基础概念、性能影响、索引类型、创建原则、注意事项

    索引的基础概念索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 ...

  3. MySQL索引优化看这篇文章就够了!

    阅读本文大概需要 5 分钟. 来源:cnblogs.com/songwenjie/p/9410009.html 本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引 ...

  4. MySQL索引设计不可忽视的知识点

    本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开. 一.MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么 ...

  5. 讲真,MySQL索引优化看这篇文章就够了

    本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开. 一.MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么 ...

  6. mysql索引创建和使用细节

    最近困扰自己很久的膝盖积液手术终于做完,在家养伤,逛技术博客看到easyswoole开发组成员仙士可博客有关mysql索引方面的知识,自己打算重温下. 正常业务起步数据表数据量较少,不用考虑使用索引, ...

  7. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  8. MySQL中索引的基础知识

    本文是关于MySQL中索引的基础知识.主要讲了索引的意义与原理.创建与删除的操作.并未涉及到索引的数据结构.高性能策略等. 一.概述 1.索引的意义:用于提高数据库检索数据的效率,提高数据库性能. 数 ...

  9. MySQL 索引知识整理(创建高性能的索引)

    前言: 索引优化应该是对查询性能优化的最有效的手段了.索引能够轻易将查询性能提高几个数量级. // 固态硬盘驱动器有和机械硬盘启动器,有着完全不同的性能特性: 然而即使是固态硬盘,索引的原则依然成立, ...

随机推荐

  1. 在Jetson TX2上显示摄像头视频并使用python进行caffe推理

    参考文章:How to Capture Camera Video and Do Caffe Inferencing with Python on Jetson TX2 与参考文章大部分都是相似的,如果 ...

  2. 《Docker从入门到跑路》之存储卷介绍

    默认情况下,容器会随着用户删除而消失,包括容器里面的数据.如果我们要对容器里面的数据进行长久保存,就不得不引用存储卷的概念. 在容器中管理数据持久化主要有两种方式:1.数据卷(data volumes ...

  3. 绕WAF文章收集

    在看了bypassword的<在HTTP协议层面绕过WAF>之后,想起了之前做过的一些研究,所以写个简单的短文来补充一下文章里“分块传输”部分没提到的两个技巧. 技巧1 使用注释扰乱分块数 ...

  4. 【Linux】1 创建目录:mkdir

    mkdir命令用于创建目录,如同一路径下创建单个或多个目录.递归创建目录,但同路径下不能创建同名目录,且目录名区分大小写. [命令] mkdir [用途] 创建目录(单个目录/多个目录) [语法] m ...

  5. 如何发挥Visual Studio 2019强大的编辑功能轻松编辑Keil项目

    本文地址:https://www.cnblogs.com/jqdy/p/12565161.html 习惯了VS的强大编辑功能,对Keil 5越来越深恶痛绝.查阅网络文章后按图索骥初步实现了VS编辑Ke ...

  6. Mysql常用sql语句(17)- left/right join 外连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 外连接分为两种:left join.right ...

  7. [hdu5323]复杂度计算,dfs

    题意:求最小的线段树的右端点(根节点表示区间[0,n]),使得给定的区间[L,R]是线段树的某个节点. 数据范围:L,R<=1e9,L/(R-L+1)<=2015 思路:首先从答案出发来判 ...

  8. Mysql 常用函数(20)- ceiling 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html ceiling 的作用 向上取整,ceil 函数一 ...

  9. iOS事件的响应和传递机制

    跟二狗子哥哥交流的时候,他总说我,说的过程太业余.故 好好学习整理一下.努力不那么业余. 一.事件的产生.传递.响应: 1.事件从父控件依次传递到子控件,寻找最合适的子控件View. 2.寻找最合适的 ...

  10. css3 文字处理

    text-overflow:ellipsis;超出的文字显示...前提是该盒子必须有overflow:hidden;属性 text-shadow 文字阴影 direction:控制文字方向,值有dow ...