口试官出的MySQL索引题目,这篇文章全给你办理!
插入几条测试数据
到这一步,我们已经根基筹备好了必要的数据,我们可以举办更深一步的连系索引的切磋。 我们什么时辰必要建设连系索引呢 索引成立的首要目标就是为了进步查询的服从,那么连系索引的目标也是相同的,连系索引的目标就是为了进步存在多个查询前提的环境下的服从,就如上面成立的表一样,有多个字段,当我们必要操作多个字段举办查询的时辰,我们就必要操作到连系索引了。 什么时辰连系索引才会施展浸染呢 偶然辰,我们会用连系索引,可是,我们并不清晰其道理,不知道什么时辰连系索引会起到浸染,什么时辰又是会失效的? 带着这个题目,我们相识一下连系索引的最左匹配原则。 最左匹配原则:这个原则的意思就是建设组合索引,以最左边的为准,只要查询前提中带有最左边的列,那么查询就会行使到索引。 下面,我们用几个例子来看看这个原则。
我们看看这条语句的功效,起首,我们看到行使了索引,由于查询前提中带有最左边的列a,那么操作了几个索引呢?这个我们必要看key_len这个字段,我们知道utf8编码的一个字符3个字节,而我们行使的数据范例是char(2),占两个字节,索引就是2*3便是6个字节,以是只有一个索引起到了浸染。
这个语句我们可以看出,这个没有行使索引,由于possible_keys为空,并且,从查询的行数rows可以看出为6(我们测试数据总共6条),声名举办了通盘扫描的,声名这种环境是不切合最左匹配原则,以是不会行使索引查询。
这种环境又有点纷歧样了,我们行使了一个排序,可以看出行使了索引,通过key_len为12可以获得行使了2个索引a、b,其它在Extra选项中可以看到行使了Using filesort,也就是文件排序,这里行使文件排序的缘故起因是这样的:上面的查询行使了a、b索引,可是当我们用d字段来排序时,(a,d)可能(b,d)这两个索引是没有排序的,连系索引的行使有一个甜头,就是索引的下一个字段是会自动排序的,在这里的这种环境来说,c字段就是排序的,可是d是不会,假如我们用c来排序就会获得纷歧样的功效。
是不是可以看到,当我们用c举办排序的时辰,由于行使了a、b索引,以是c就自动排序了,以是也就不消filesort了。 讲到这里,我信托通过上面的几个例子,对付连系索引的相干常识已经很是的透彻清楚了,最后,我们再来聊几个常见的题目。 Q1:为什么差池表中的每一个列建设一个索引呢 第一,建设索引和维护索引要淹灭时刻,这种时刻跟着数据量的增进而增进。 第二,索引必要占物理空间,除了数据表占数据空间之外,每一个索引还要占必然的物理空间,假如要成立聚簇索引,那么必要的空间就会更大。 第三,当对表中的数据举办增进、删除和修改的时辰,索引也要动态的维护,这样就低落了数据的维护速率。 Q2:为什么必要行使连系索引 镌汰开销。建一个连系索引(col1,col2,col3),现实相等于建了(col1),(col1,col2),(col1,col2,col3)三个索引。每多一个索引,城市增进写操纵的开销和磁盘空间的开销。对付大量数据的表,行使连系索引会大大的镌汰开销! 包围索引。春连系索引(col1,col2,col3),假若有如下的sql: select col1,col2,col3 from test where col1=1 and col2=2。那么MySQL可以直接通过遍历索引取得数据,而无需回表,这镌汰了许多的随机io操纵。镌汰io操纵,出格的随机io着实是dba首要的优化计策。以是,在真正的现实应用中,包围索引是首要的晋升机能的优化本领之一。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |