InnoDB索引的存储方式不选B+树会怎样?

无法创建索引

之前有一个场景,看到Navicat里面创建索引的时候,可选的索引方法
在这里插入图片描述
是有两种的,一种是BTREE就是AKA的B+树,还有一种是HASH,实际平时我们都不会用到这个HASH,导致我一直以为InnoDB索引方式可以支持这两种。直到一天我自己试了一次之后发现是你当你选HASH的时候是不生效的,Navicat自动帮你转BTREE了。坑爹了,针对这个细节问题,翻译了MySQL的官方文档,参照MySQL5.6版本。
下面是一个完整的创建索引语句实例,具体我们看看可选的参数有什么:

CREATE [ONLINE | OFFLINE] [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

# ASC|DESC目前是没用的
key_part:
    col_name [(length)] [ASC | DESC]

index_option: {
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
}

index_type:
    USING {BTREE | HASH}

algorithm_option:
    ALGORITHM [=] {DEFAULT | INPLACE | COPY}

lock_option:
    LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
  • [ONLINE | OFFLINE]:这个参数主要是用于 NDB存储引擎的,是在分布式数据库集群中在线或者离线创建索引的,这个本人没用过,理解一下作用即可。
  • [UNIQUE | FULLTEXT | SPATIAL] :这是索引的类型
    • UNIQUE:唯一索引
    • FULLTEXT:全文索引,注意InnoDB是用不了全文索引的,在MyISAM才适用,这也是它们兄弟两的区别之一。记忆方法就是只有B+树做不了全文索引,但是从MySQL5.6.4又支持了…。
    • SPATIAL:这是对数据字段类型为空间类型的一个索引,也没有用过。
  • [index_type]:这就是刚刚说的索引类型
    • HASH:AKA哈希算法,只在内存引擎中存在,即MEMORY
    • BTREE:AKA B+树/B树算法,在InnoDB中为B+,在MyISAM中为B
  • [index_option]
    • KEY_BLOCK_SIZE:对于MyISAM表, KEY_BLOCK_SIZE可以选择指定用于索引键块的字节大小。该值被视为提示;如有必要,可以使用其他大小。KEY_BLOCK_SIZE为单个索引定义指定的值将覆盖表级KEY_BLOCK_SIZE值。跟InnoDB也没有什么关系。
    • index_type:可能会被抛弃,直接用前面的index_type把。
    • WITH PARSER parser_name:指的是用的全文索引的解析器名称。
  • [algorithm_option | lock_option]:这个配置主要跟修改ALTER TABLE语义一样,没用过,一般都是用ALTER TABLE的语义去增加索引的。

所以对于InnoDB,MyISAM来说只支持树的索引方式。下面在发下不同数据库引擎的索引方式。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值