面试官出的MySQL索引问题,这篇文章全给你解决!
如果想要查看表中的索引信息,可以使用命令SHOW INDEX,下面的例子,我们查看表table_index的索引信息。
得到上面的信息,上面的信息什么意思呢?我们逐一介绍!
直接删除索引方式
修改表结构时删除索引
1.5 Cardinality关键字解析 在上面介绍了那么多个关键字的意思,但是Cardinality这个关键字非常的关键,优化器会根据这个值来判断是否使用这个索引。在B+树索引中,只有高选择性的字段才是有意义的,高选择性就是这个字段的取值范围很广,比如姓名字段,会有很多的名字,可选择性就高了。 一般来说,判断是否需要使用索引,就可以通过Cardinality关键字来判断,如果非常接近1,说明有必要使用,如果非常小,那么就要考虑是否使用索引了。 需要注意的一个问题时,这个关键字不是及时更新的,需要更新的话,需要使用ANALYZE TABLE,例如。
因为目前没有数据,所以,你会发现,这个值一直都是0,没有变化。 InoDB存储引擎Cardinality的策略 在InnoDB存储引擎中,这个关键字的更新发生在两个操作中:insert和update。但是,并不是每次都会更新,这样会增加负荷,所以,对于这个关键字的更新有它的策略:
默认InnoDB存储引擎会对8个叶子节点进行采样,采样过程如下:
因为随机采样,所以,每次的Cardinality值都是不一样的,只有一种情况会一样的,就是表中的叶子节点小于或者等于8,这时候,怎么随机采样都是这8个,所以也就一样的。 1.6 Fast Index Creation 在MySQL 5.5之前,对于索引的添加或者删除,每次都需要创建一张临时表,然后导入数据到临时表,接着删除原表,如果一张大表进行这样的操作,会非常的耗时,这是一个很大的缺陷。 InnoDB存储引擎从1.0.x版本开始加入了一种Fast Index Creation(快速索引创建)的索引创建方式。 这种方式的策略为:每次为创建索引的表加上一个S锁(共享锁),在创建的时候,不需要重新建表,删除辅助索引只需要更新内部视图,并将辅助索引空间标记为可用,所以,这种效率就大大提高了。 1.7 在线数据定义 MySQL5.6开始支持的在线数据定义操作就是:允许辅助索引创建的同时,还允许其他insert、update、delete这类DM操作,这就极大提高了数据库的可用性。 所以,我们可以使用新的语法进行创建索引:
ALGORITHM指定创建或者删除索引的算法
LOCK表示对表添加锁的情况
2 B+ 树索引的使用 2.1 联合索引 联合索引是指对表上的多个列进行索引,这一部分我们将通过几个例子来讲解联合索引的相关知识点。 首先,我们先创建一张表以及为这张表创建联合索引。
创建联合索引
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |