MySQL——索引

索引

定义:

索引(INDEX)是帮助MySQL高效获取数据的数据结构

本质:索引是排好序的快速查找数据结构。

重点:索引会影响到MySQL查找(WHERE的查询条件)和排序(ORDER BY)两大功能!

优势:

  1. 查找:类似大学图书馆的书目索引,提高数据检索的效率,降低数据库的IO成本。
  2. 排序:通过索引対数据进行排序,降低数据排序的成本,降低了CPU的消耗。

劣势:

  1. 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。
  2. 虽然索引大大提高了查询速度,但是同时会降低表的更新速度,例如对表频繁的进行 INSERT 、 UPDATE 和 DELETE 。因为更新表的时候,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加的索引列
    的字段,都会调整因为更新所带来的键值变化后的索引信息。
  3. 索引只是提高效率的一个因素,如果MySQL有大数据量的表,就需要花时间研究建立最优秀的索引

MySQL索引分类

单值索引:一个索引只包含单个列,一个表可以有多个单列索引。
唯一索引:索引列的值必须唯一,但是允许空值。
复合索引:一个索引包含多个字段。

*建议:一张表建的索引最好不要超过5个!*

索引数据结构:

BTree 索引。
Hash 索引。
Full-text 全文索引。
R-Tree 索引。

哪些情况需要建索引

  1. 主键自动建立主键索引(唯一 + 非空)。
  2. 频繁作为查询条件的字段应该创建索引。
  3. 查询中与其他表关联的字段,外键关系建立索引。
  4. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。
  5. 查询中统计或者分组字段(group by也和索引有关)。

哪些情况不需要建索引

  1. 记录太少的表。
  2. 经常增删改的表。
  3. 频繁更新的字段不适合创建索引。
  4. Where条件里用不到的字段不创建索引。
  5. 假如一个表有10万行记录,有一个字段A只有true和false两种值,并且每个值的分布概率大约为50%,那么对A字段建索引一般不会提高数据库的查询速度。索引的选择性是指索引列中不同值的数目与表中记录
    数的比。如果一个表中有2000条记录,表索引列有1980个不同的值,那么这个索引的选择性就是1980/2000=0.99。一个索引的选择性越接近于1,这个索引的效率就越高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值