整理mysql数据库所有索引的关系

一直以来不清楚数据库引擎,聚集非聚集索引和其他索引之间的关系,特地求教了公司DBA后,在此做记录(以下只记录mysql)

       1.先说数据库引擎,在mysql中常用的引擎有innodb和myisam,并且在mysql5.5还是5.6之后默认就是innodb了,所以我们现在创建表时几乎都是用innodb,等下我们就来说说最常用的innodb引擎

       2.然后我们来看看索引的方法,在mysql的innodb引擎下只能创建b树的变种(b-tree、b+tree......)没有hash索引,看到这可能会很奇怪,但就是这样,mysql的hash索引是不支持直接指定的,在你创建完索引之后,如果mysql觉得这个索引使用hash会有更高效率的时候,会自动处理类型变为hash,也就是innodb做索引,只需也只能指定成btree

       3.先弄清楚一点就是,数据库的聚集索引只是一种数据存储方式,而不是单独的索引类型(唯一索引,文本索引等),聚簇索引的数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的,也可以这样理解,聚集索引就是新华字典中的拼音目录,非聚集就是偏旁目录,拼音目录的顺序是和字典中的顺序是一致的,而偏旁目录却不是

以上都是对索引的了解,接下来才是进入关键内容,

在sqlserver中主键默认是设置为聚集索引,但是可以进行修改
其次,mssql,oracle都可以设置非主键索引为聚集索引
最后如果在mysql中,那么你就可以说非主键索引,都是非聚集索引,只有主键才是聚集索引

对于不同的索引类型的性能差别就不多说了,这个百度一大堆,我们来说说不同的索引数据存储方式对应的性能差别,也就是聚集和非聚集的性能上差别在哪,其实很容易理解,一个顺序相同一个顺序不同,那主要体现在按顺序插入数据,查询一个连续区间数据时,或者说between..and,大于小于之类的查询聚集索引的性能就体现出来了,如果都是查询离散的数据,或者随机插入数据(比如主键uuid),那么性能都高不起   这个应该都可以理解

说到这补充一个知识点,在索引类型中为什么组合索引要准从最左原则

 

组合索引,其实就是把多个单列索引拼接起来,比如组合id,name索引
那么在索引树中就存放的是:1-张三;2-李四这样的数据,当然真实存储没有-
最左前缀原则也就是,必须id=xx and name =xx才能用索引,你可以理解为组合索引的数据查询时在索引树中是使用类似于 
like 'xxx%' 这样的,那么就必须满足最左了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值