>  기사  >  데이터 베이스  >  每日学习笔记(15)_MySQL

每日学习笔记(15)_MySQL

WBOY
WBOY원래의
2016-06-01 13:51:37875검색

今天接着读《MySQL技术内幕InnoDB存储引擎》的第5章关于索引这部分内容。

什么时候使用B+树索引?并不是在所有的查询条件下出现的列都需要添加索引,作者指出当访问表中很少一部分行时,使用B+树索引才有意义。对于像性别,地区,类型等字段,它们的可取值范围很小,即所谓低选择性,比如Select * from student where sex=’M’,那么结果可能是该表50%的数据,此时添加B+树索引是完全没有必要的,相反,如果某个字段的取值范围很广,几乎没有重复性,即高选择性,则此时使用B+树索引是最合适的,例如姓名字段。

         因此,当访问高选择性字段并从表中取出很少一部分数据行时,对这个字段添加B+ 树索引是非常有必要的。但是如果出现了访问字段是高选择性的,但是取出的行数据占据表中大部分的数据时,此时MySQL就不会使用B+树索引了。MySQL的优化器会通过EXPLAIN的rows字段预估查询可能得到的行,如果大于某个值,则B+树会选择进行全表的扫描,至于这个值,作者估计一般为20%,即取出的数据量超过表中数据的20%,优化器就不会使用索引,而是进行全表的扫描。但有时优化器的选择并不完全是正确的,此时你可以强制使用索引。

作者:洞庭散人

出处:http://phinecos.cnblogs.com/    

本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.