MySQL数据库—InnoDB索引

本文详细介绍了MySQL InnoDB存储引擎的索引原理,包括索引的分类、创建建议、B+树索引以及聚集索引和辅助索引的区别。通过对索引的工作方式和优化的探讨,揭示了如何正确使用索引以提高查询效率,同时提到了索引的失效情况和错误使用索引的示例。
摘要由CSDN通过智能技术生成

一、什么是索引

索引(Index)是帮助MySQL高效获得数据的、排好序数据结构

类比查字典,我们通过字典目录可以更快更精确的定位到某个字在那一页。数据库索引也是如此,在数据量较大时(一般百万级数据及以上),利用表的某一列或是某几列为关键字创建索引,会使mysql在以索引列为条件的查询中缩小查询的范围,从而减少不必要的IO步骤,提高查询效率。另外,索引都是排好序的结构,对于存在排序和分组的sql语句,使用索引还避免了在某些情况下排序的开销,降低了CPU的消耗。

但过度使用索引也是有一定弊端的,索引也是要占用物理空间的,更严重的是,为了保持索引可用,在对表进行DML操作(增删改)时,还需要对索引进行调整,在索引过多的情况下,无疑会降低效率。此外,如果索引创建不当或是sql语句编写不当,还会导致索引失效的问题,白白浪费资源。

接下来,将会从MySQL InnoDB存储引擎底层开始,了解数据及索引的存储形式,从而能够进一步了解索引的使用方法。

二、索引的分类

在InnoDB存储层面来看,其支持

  • B+树索引
    • 聚集索引
    • 辅助索引(非聚集索引)
  • 哈希索引
  • 全文索引:意在提高通过字段(文章)的某一部分(非前缀)查询时的效率

其中哈希索引由引擎自主判断创建,无需人为干预

全文索引在InnoDB 1.2.x版本开始支持,意在提高通过字段(文章)的某一部分(非前缀)查询时的效率

B+数索引是使用最多且最值得学习的索引,下文将主要对B+数索引做介绍。

三、索引的创建

1、索引创建
#创建索引
##方式一
CREATE [UNIQUE] INDEX index_name ON table_name(field_list);#多个字段用逗号隔开
##方式二
ALTER table_name ADD [UNIQUE | INDEX | PRIMARY KEY | FULLTEXT][index_name] ON (field_list);#唯一|普通|主键|全文索引
#删除索引
DROP INDEX [index_name] ON table_name;
#查看索引
SHOW INDEX FROM table_name;
2、创建建议
  • 建议创建索引

    • 主键、外键、唯一键会自动创建索引
    • 频繁作为查询条件的字段
    • 查询中需要排序的字段
    • 查询中需要统计或分组的字段
    • 尽量创建复合索引
  • 不建议创建索引

    • 记录太少
    • 以DML为主的表
  • Cardinality值

    另外,通过查看表的索引show index from table_name,可以看到一个Cardinality字段,如果Cardinality/记录行数的值越接近1,则说明这个索引可选性越高

    通俗一点理解,一个表中记录数为n,表索引列有m个不同的值,那个这个索引的选择性就是m/n,一个索引的选择性越接近1,这个索引的效率越高。

    即数据重复的越少,索引效率越高。比如像是性别字段,仅有两个可选的值(男或女),那创建索引是没有意义的。(会导致索引失效࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值