首页 > 数据库 >mysql索引优化-01

mysql索引优化-01

时间:2023-01-14 22:44:21浏览次数:44  
标签:index 01 mysql 索引 表名 数据结构 主键

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  表名

标签:index,01,mysql,索引,表名,数据结构,主键
From: https://www.cnblogs.com/hg-blogs/p/17052669.html

相关文章

  • 【2023-01-10】生活装修
    20:00身先行动起来,装出快乐起来,随之心就会快乐起来。                                    ......
  • 【2023-01-09】连岳摘抄
    23:59须知人要乐生,以身体健康为第一要义。                                       ......
  • mysql进阶
    事务 要么都成功,要么都失败ACID原子,一致,持久,隔离原子性,一致性,隔离性,持久性原子性:要么都成功,要么都失败回滚一致性:事务前后的数据完整性要保证一致持久性:事务一......
  • 每日食词—day101
    OAuth认证、授权、一键登录advancedadj. v.高级、进阶、先进、高级设置、高级选项graphicsn.图形、图案、图像、图表signaturen. adj.签名、署名、签字、......
  • Ubuntu 17.04代号“Zesty Zapus”将于2017年4月推出
    就在几分钟前,Canonical和Ubuntu创始人MarkShuttleworth非常高兴地宣布了流行的Ubuntu Linux操作系统下一个主要版本的代号。这个版本是Ubuntu17.04,其代号将是“Zesty......
  • day01-Spring基本介绍
    Spring基本介绍1.官方资料和下载1.1Spring5下载直接访问https://repo.spring.io/ui/native/release/org/springframework/spring/,选择相应版本即可进入官网https......
  • mysql like性能优化
    网上很多优化like的方法,无非下面几种,抄来抄去的。我用213万条数据,每条数据50个字段左右(用的真实的生产环境的mysql数据库,和真实的生产环境的数据),做了性能测试;时间记录的次数......
  • mysql 处理空格数据
    mysql中有处理空格的函数,做个简单介绍:1.TRIM()函数这个函数的用法很简单,但是无法去除中间的空格--去除左右空格SELECTTRIM('fdfd');SELECTTRIM(BOTH''FROM'......
  • DTOJ-2023-01-02-测试-题解
    (2023省选模拟Round#4)之前感冒了一阵子,错过了两场省选模拟,不过我不打算补(乐成绩:0+42+0(就是说T1写挂了)A题目链接题目大意小\(\omega\)最近学习了分治\(\text{......
  • MySQL 高可用:mysql-mmm 部署
    基本信息和规划:#服务器信息:====================================================================ipaddresshostnameServerVersionMySql------------------......