MySQL索引

1.什么是索引?

索引就是存储引擎为了提高数据的访问效率提供的一种数据结构;是对数据库表中一个或多个列的值排序的结构。

2.索引的优势

  1. 索引能够加快数据库的检索速度
  2. 确保每一行数据的唯一性
  3. 可以在查询的过程中使用隐藏优化器一高系统的性能

3. 索引的缺点

  1. 索引会降低插入、删除、修改等人物的速度
  2. 索引需要空间存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改。这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5次的磁盘I/O.
  3. 索引不但会使得插入和修改的效率降低,而且在查询的时候,有一个查询优化器,太多的索引会让优化器困惑,可能没有办法找到正确的查询路径,从而选择了慢的索引。

4.索引的种类

索引有主键索引、唯一索引、全文索引、普通索引、组合索引

索引又可以分为聚集索引非聚集索引

聚集索引:索引为主键,叶子节点为整行数据数据。在InnoDB里称为聚簇索引

非聚集索引:除主键以外的字段,该索引的叶子节点的内容是主键的值而不是整行数据,非聚集索引需要两步才能查出结果。联合索引指的是多个字段组合而成的索引属于非聚集索引。在InnoDB里被称为二级索引

注意:主键的长度越小,普通索引对应的叶子节点就越小,索引占用的空间也越小。

5.索引有哪些结构

        1.hash:以键-值即(key-value)存储数据的结构,根据输入的key找到对应的值。执行过程先通过哈希函数计算出key的位置,然后将key放入数组,若发生hash冲突则将挂载到链表中;倘若有多个key冲突会造成查询性能下降(hash冲突)。

        适用场景:等值查询

        2.有序数组:只适用于静态存储引擎:用于等值查询和范围查询(id必须递增)

        3.B+树:左子节点<父节点<右节点innoDB默认使用b树

B+树与hash的区别:

  1. 由于hash采用哈希表实现,是kv结构,存储数据没有顺序,无法实现利用索引查询区间的数据,所以采用多路平衡的B+树来实现,它的节点是天然有序的,对于范围查询无需全表扫描。 
  2. 哈希索引无法利用索引实现排序
  3. 哈希索引不支持组合索引的最左匹配原则
  4. 在大量键值的情况下会降低查询效率(哈希碰撞)      

6.导致索引失效的因素:

  • where子句中使用or连接,因替换为in(若要使用or的话需要将or条件中的所涉列建立索引,查询每个列使用单独的索引)
  • where子句中使用(!=、<>、is null、is not null{应替换为exists})
  • like模糊查询时(%x)的形式会全表扫描
  • 使用索引进行表达式操作和函数操作
  • 对索引应用内部索引

7.建立索引的场景

       需要建立:

                1.主键自动创建唯一索引。

                2.为作为条件频繁查询的字段建立索引

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

                4.为排序字段创建索引

        不需要:

                1.表记录少的不建议创建索引

                2.经常做增删改的表不建议创建索引

                3.where子句用不到的字段

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值