1.1索引是什么?

  mysql官方对于索引的定义:可以帮助mysql高效的获取数据的数据结构。

  mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构给以某种引用或者说指向表中的数据,这样我们就可以通过数据结构上实现高级的查找算法来快速查找到我们想要的数据。这种数据结构就是索引。

  我们可以简单的理解索引就是“排好序的可以快速查找数据的数据结构!”,类似于新华字典的一个目录。

1.2索引数据结构

  下图就是可能的二叉树的索引方式:左边的是表,总共有2列数据。如果sql查询的条件是where col2 = 89,如果不使用索引的话,那么会一直进行for循环一次一次往下找,那么这里的例子就会找6次,在第6次才会找到这个值,而是用数据结构的话,那么只需要对比1次,刚好比34大,这种情况就直接找到了,对于大数据量来说,这种方式会高效很多!

  这种二叉树的弊端:当极端情况下,数据进行递增插入的时候,会一直向右边进行插入,形成链表,查询的效率会降低!因为又会开始进行遍历了。

  

  mysql中常用的数据结构有BTree(Myisam普通索引),B+Tree索引(Innodb普通索引),Hash索引(memory存储引擎)等,但是一般都是使用的Innodb存储引擎。

1.3为什么要使用索引?

  提高数据检索的效率,降低数据的IO成本。

  通过索引来对数据进行排序,降低数据排序的成本,可以降低CPU的消耗。

1.4索引这么好,那有什么缺点呢?

  索引实际上也是一张表,保存的主键和索引的字段,并且指向实体表的记录,所以索引也是需要占用空间的。在索引大大提高查询速度的时候,缺会降低表的更新速度,在对表进行数据CRUD的时候,mysql不仅要更新数据,还需要保存索引文件信息。每次更新添加了索引的列的字段的时候都会去调整因为更新所带来的减值变化后的信息。这些都是需要消耗时间和空间。

1.5索引的使用场景是什么呢?

 1.5.1适合创建索引的场景

  1.主键自动建立的唯一索引

  2.频繁作为查询条件的字段应该创建索引(where 后面的语句)

  3.查询中与其他表关联的字段,外键关系建立索引。

  4.多字段查询下倾向创建组合索引

  5.查询中排序的字段,排序字段若通过索引去访问将大大提高排序的速度

  6.查询中统计或者分组的字段

 1.5.2 不适合创建索引的场景:

   1. 表的记录太少

   2. 经常增删改的表

   3.where 条件里面用不到的字段不建立索引

1.6索引的分类(重点学习)

  1.6.1主键索引

    1.表中的列添加了主键的约束之后,数据库会自动的建立主键索引

    2.单独创建主键索引和删除主键索引的语法:

    alter  table 表名 add primary key  (字段)

    drop table 表名 drop primary key

  1.6.2 唯一索引

    1.表中的列创建了唯一约束时,数据库会自动创建唯一索引。

    2.单独创建和删除唯一索引语法:

      alter table 表名 add unique on 表名(字段)

    或者 create unique index 索引名 on 表名(字段)

      drop index 索引名 on 表名

  1.6.3 单值索引

   单值索引就是一个索引只包含单个列,一个表可以有多个单值索引。

    1.建表的时候可以随着表一起建立单值索引

    2.单独创建和删除单值索引:

    alter table 表名 add index 索引(字段)

  或者 create index 索引名 on 表名(字段)

  1.6.4符合索引

    符合索引就是一个索引包含了多个列:

    1.建表的时候可以随着表一起进行简历复合索引

    2.单独创建索引和删除复合索引:

      create index 索引名 on 表名(字段1,字段2)

    或者 alter table 表名 add index 索引名(字段1,字段2)

    删除复合索引:drop index 索引名 on  表名

mysql索引优化-01的更多相关文章

  1. Mysql 索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  2. mySql索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  3. mysql索引优化

    mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间 ...

  4. 知识点:Mysql 索引优化实战(3)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 索引原理知识回顾 索引的性 ...

  5. MySQL索引优化步骤总结

    在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...

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

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

  7. mysql索引优化比普通查询速度快多少

    mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...

  8. 【ZZ】MySQL 索引优化全攻略 | 菜鸟教程

    MySQL 索引优化全攻略 http://www.runoob.com/w3cnote/mysql-index.html

  9. mysql数据库优化课程---17、mysql索引优化

    mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...

  10. MYSQL索引优化思维导图

    有关索引的优化.MYSQL索引优化     文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing

随机推荐

  1. 在Kubernetes上安装Netdata的方法

    介绍 Netdata可用于监视kubernetes集群并显示有关集群的信息,包括节点内存使用率.CPU.网络等,简单的说,Netdata仪表板可让您全面了解Kubernetes集群,包括在每个节点上运 ...

  2. 清理过时的.NET SDK 和 运行时

    TL;DR .NET 卸载工具 随着这几年.NET 的快速发展,电脑上的.NET SDK 和 runtime 也在不断的积累.每个sdk动辄都是上百兆的空间占用,很快本来就不富裕的C盘空间就更加紧俏了 ...

  3. 【c#表达式树】最完善的表达式树Expression.Dynamic的玩法

    引言 在我第一次写博客的时候,写的第一篇文章,就是关于表达式树的,链接:https://www.cnblogs.com/1996-Chinese-Chen/p/14987967.html,其中,当时一 ...

  4. sql 开窗函数排序遇到空值的处理办法

    sql sever默认null最小 升序排序 null值在最前面,若要放在后面,则: order by case when col is null then 1 else 0 end, col 降序排 ...

  5. Vuex刷新页面数据会丢失吗?咋解决的?

    1.问题描述:页面刷新的时候vuex里的数据会重新初始化,导致数据丢失.因为vuex里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,vuex里面的数据就会被重新赋值. 2.解决思 ...

  6. Vue修改单页面背景颜色

  7. 2020-09-16:谈谈TCP的控制位?

    福哥答案2020-09-16:#福大大架构师每日一题# 福哥口诀法:紧确推和复同终(紧急位URG,确认位ACK,推送位PSH,复位位RST,同步位SYN,终止位FIN). [答案来自此链接](http ...

  8. 2022-06-01:给定一个数组arr,可能有正、有负、有0,无序。 只能挑选两个数字,想尽量让两个数字加起来的绝对值尽量小。 返回可能的最小的值。

    2022-06-01:给定一个数组arr,可能有正.有负.有0,无序. 只能挑选两个数字,想尽量让两个数字加起来的绝对值尽量小. 返回可能的最小的值. 答案2022-06-01: 排序,双指针. 代码 ...

  9. Python获取当前时间、获取当月第一天、最后一天日期等方法

    ```python先导入包: import calendarimport datetimefrom datetime import timedelta获取今天日期: #返回datetime格式:eg: ...

  10. web自动化06-键盘操作

    键盘操作 1.说明: 1). 模拟键盘上一些按键或者组合键的输入 如:Ctrl+C .Ctrl+V: 2). Selenium中把键盘的按键都封装在Keys类中 2. Keys类 导包:from se ...