Mysql系列之索引篇

文章目录

  • 是什么?
  • 为什么使用?
  • 注意事项?
  • 分类?
    • 数据结构

 为了提高数据库的查询效率,然后我们会给一些字段增加索引,但是大家有没有考虑过,索引是什么?我们为什么要用索引?增加了索引就一定快吗?如何实现按照索引查找呢?索引的数据结构有哪些呢?它分为哪几类呢?大家别懵,下面就深入去探个究竟吧! Mysql系列之索引篇_第1张图片

是什么?

 索引是为了加快对表中数据行的检索而创建的一种分散存储的数据结构;通俗来说吗,索引就类似于书的目录,通过目录找内容,效率比随便翻要提高不少呢;

为什么使用?

 那我们为什么要用索引呢,它的好处适合什么呢?

1. 减少存储引擎扫描的数量;
2. 把随机IO变成顺序IO
3. 帮助我们在分组、排序的时候,避免用临时表
4. 保证数据库表中每一行数据的唯一性
5. 加速表与表之间的连接

 看到了索引折磨多的好处,是不是又心生邪念,那把数据库表中的每个字段都设定为索引,那我的查询速度不嗖嗖的!
Mysql系列之索引篇_第2张图片
如果折磨想,并且折磨做,哈哈,你就抱着被子哭去吧;
1. 索引的创建也是需要占用物理空间的,如果每个字段都是索引,那么需要的物理空间会很大;
有人说,没事,我内存大;
2.那好,创建索引和维护索引都是很耗费实践的,而且随着数据量的增加而增多;
3.当我们进行update、insert、 delete的时候,索引也需要动态维护,这样就降低了维护效率;

 你又要说了,这也不行,那些不行,你光说了索引的好处,那我到底把哪个字段设置为索引嘛!Ծ‸Ծ

只要符合下面原则,就可以:

  1. 离散型越高,选择性越好
  2. 最左匹配原则;
  3. 尽可能的扩展索引,不要新建立索引
  4. 索引列不能参与计算,尽量保持列“干净”
  5. 单个多列组合索引和多个单列索引的检索查询效果不同,因为在执行SQL时,MySQL只能使用一个索引,会从多个单列索引中选择一个限制最为严格的索引

注意事项?

 认真听,敲小黑板了!重要的事情来了~~~~~~~

  1. 避免在where子句上加上函数,这样会无法命中索引,导致索引失效;
  2. 将 索引的列设置为 not null ,否则会导致索引失效,而全表扫描;
  3. 如果进行全表扫描,也就是我们所说的“select *”,然后会索引失效;
  4. 没有遵循最左匹配原则;
  5. 使用 !=、like进行条件查找;
  6. 字符串没有添加单引号;

分类?

  1. 主键索引
    ALTER TABLEtable_nameADD PRIMARY KEY (column)

  2. 唯一索引
    ALTER TABLEtable_nameADD UNIQUE (column)

  3. 普通索引
    ALTER TABLEtable_nameADD INDEX index_name (column)

  4. 全文索引
    ALTER TABLEtable_nameADD FULLTEXT (column)

  5. 多列索引
    ALTER TABLEtable_nameADD INDEX index_name (column1,column2,column3)

数据结构

 mysql中主要的数据结构有两种:哈希索引、Btree索引

  1. 哈希索引
     对于它来说,底层的数据结构就是哈希表,所以我们在进行单挑记录查询的时候,可以选择哈希索引,性能是最快的,其余场景,建议使用Btree索引;
    2.BTree索引
     Mysql的Btree索引使用的是B树中的B+Tree;

你可能感兴趣的:(数据库,Mysql)