数据库为什么要建立索引?
-
一:什么是索引?
索引(Index)是帮助MySQL高效获取数据的数据结构。
二:为什么要建立索引?
一个没有索引的数据库表就相当于一本没有索引的新华字典,当你想找出其中一个汉字的时候,无异于寻找MH370碎片啊。我们为指定的字段创建索引之后,当我们根据条件查找数据的时候,数据库引擎就可以利用查找算法(二分查找法)很高效的查出来。
三:选择什么字段建立索引
索引也是要占用存储空间的,建立索引的时候也是有一定的规则可寻的。
1)选择一些经常要作为查询条件的字段。
2)选择区分度高的字段,count(distinct 字段)/count(*),当然最小就是1了,也就是唯一索引了。这个值越小,查询的效率越高。当这个值大到一定的程度的时候(具体还不是很清楚),数据库就会放弃索引进行全表扫描。你可以想象一下,如果一个表有一百万的数据,其中有一个性别的字段,这个字段只会出现两个值。然后你为该字段建了一个索引,自以为查询性能提升了N倍。其实,你就相当于把一百万条数据按照性别分别放到两个箱子里面,假设每个箱子里面有50万条性别为男的记录,因为这个箱子里面的性别都是一样的,索引也起不了任何作用了,什么二分查找也用不上了,只能用暴力算法解决咯,全表扫描咯。相反,你可以为一个人的身份证号码建立唯一索引,这样就可以从头到尾用二分查找法查找了,效率杠杠滴。
四:索引缺点
索引的出现就是为了提高查询效率,就像书的目录。其实说白了,索引要解决的就是查询问题。
查询,是数据库所提供的一个重要功能,我们都想尽可能快的获取到目标数据,因此就需要优化数据库的查询算法,选择合适的查询模型来实现索引。
另外,为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间,因为索引也要随之变动。