加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

口试官出的MySQL索引题目,这篇文章全给你办理!

发布时间:2019-10-12 09:06:58 所属栏目:编程 来源:欧阳思海
导读:0 媒介 这篇文章不会讲授索引的基本常识,首要是关于MySQL数据库的B+树索引的相干道理,内里的一些常识都参考了MySQL技能黑幕这本书,也算对付这些常识的总结。对付B树和B+树相干的常识,可以参考我的这篇博客:口试官问你B树和B+树,就把这篇文章丢给他 1

假如想要查察表中的索引信息,可以行使呼吁SHOW INDEX,下面的例子,我们查察表table_index的索引信息。

  1. SHOW INDEX FROM table_indexG; 

口试官出的MySQL索引题目,这篇文章全给你办理!

获得上面的信息,上面的信息什么意思呢?我们一一先容!

  •  step4:删除索引

直接删除索引方法

  1. DROP INDEX idx_a ON table_index; 

修改表布局时删除索引

  1. ALTER TABLE table_index DROP INDEX idx_b; 

1.5 Cardinality要害字理会

在上面先容了那么多个要害字的意思,可是Cardinality这个要害字很是的要害,优化器会按照这个值来判定是否行使这个索引。在B+树索引中,只有高选择性的字段才是故意义的,高选择性就是这个字段的取值范畴很广,好比姓名字段,会有许多的名字,可选择性就高了。

一样平常来说,判定是否必要行使索引,就可以通过Cardinality要害字来判定,假如很是靠近1,声名有须要行使,假如很是小,那么就要思量是否行使索引了。

必要留意的一个题目时,这个要害字不是实时更新的,必要更新的话,必要行使ANALYZE TABLE,譬喻。

  1. analyze table table_index; 

口试官出的MySQL索引题目,这篇文章全给你办理!

由于今朝没稀有据,以是,你会发明,这个值一向都是0,没有变革。

口试官出的MySQL索引题目,这篇文章全给你办理!

InoDB存储引擎Cardinality的计策

在InnoDB存储引擎中,这个要害字的更新产生在两个操纵中:insert和update。可是,并不是每次城市更新,这样会增进负荷,以是,对付这个要害字的更新有它的计策:

  •  表中1/16的数据产生变革
  •  InnoDB存储引擎的计数器stat_modified_conter>2000000000

默认InnoDB存储引擎会对8个叶子节点举办采样,采样进程如下:

  •  B+树索引中叶子节点数目,记做A
  •  随机取得B+树索引中的8个叶子节点。统计每个页差异的记录个数,别离为p1-p8
  •  按照采样信息获得Cardinality的预估值:(p1+p2+p3+...+p8)*A/8

由于随机采样,以是,每次的Cardinality值都是纷歧样的,只有一种环境会一样的,就是表中的叶子节点小于可能便是8,这时辰,怎么随机采样都是这8个,以是也就一样的。

1.6 Fast Index Creation

在MySQL 5.5之前,对付索引的添加可能删除,每次都必要建设一张姑且表,然后导入数据到姑且表,接着删除原表,假如一张大表举办这样的操纵,会很是的耗时,这是一个很大的缺陷。

InnoDB存储引擎从1.0.x版本开始插手了一种Fast Index Creation(快速索引建设)的索引建设方法。

这种方法的计策为T媚课为建设索引的表加上一个S锁(共享锁),在建设的时辰,不必要从头建表,删除帮助索引只必要更新内部视图,并将帮助索引空间标志为可用,以是,这种服从就大大进步了。

1.7 在线数据界说

MySQL5.6开始支持的在线数据界说操纵就是:应承帮助索引建设的同时,还应承其他insert、update、delete这类DM操纵,这就极大进步了数据库的可用性。

以是,我们可以行使新的语法举办建设索引:

  1. ALTER TABLE table_name ADD [UNIQUE|FULLLTEXT] INDEX index_name (column(length))  
  2. [ALGORITHM = {DEFAULT|INPLACE|COPY}]  
  3. [LOCK = {DEFAULT|NONE|SHARED|EXLUSIVE}] 

ALGORITHM指定建设可能删除索引的算法

  •  COPY:建设姑且表的方法
  •  INPLACE:不必要建设姑且表
  •  DEFAULT:按照参数old_alter_table参数判定,假如是OFF,回收INPLACE的方法

LOCK暗示对表添加锁的环境

  •  NONE:不加任何锁
  •  SHARE:加一个S锁,并发读可以举办,写操纵必要守候
  •  EXCLUSIVE:加一个X锁,读写都不能并发举办
  •  DEFAULT:先判定是否可以行使NONE,如不能,判定是否可以行使SHARE,如不能,再判定是否可以行使EXCLUSIVE模式。

2 B+ 树索引的行使

2.1 连系索引

连系索引是指对表上的多个罗列办索引,这一部门我们将通过几个例子来讲授连系索引的相干常识点。

起首,我们先建设一张表以及为这张表建设连系索引。

  1. create table t_index(  
  2. a char(2) not null default '',  
  3. b char(2) not null default '',  
  4. c char(2) not null default '',  
  5. d char(2) not null default ''  
  6. )engine myisam charset utf8; 

建设连系索引

  1. alter table t_index add index abcd(a,b,c,d); 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读