Navigation

    BAGA.OL

    • Register
    • Login
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    数据库为什么要建立索引?

    博客
    数据库索引
    1
    1
    619
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • lichade
      lichade last edited by lichade

      一:什么是索引?

      索引(Index)是帮助MySQL高效获取数据的数据结构。

      二:为什么要建立索引?

      一个没有索引的数据库表就相当于一本没有索引的新华字典,当你想找出其中一个汉字的时候,无异于寻找MH370碎片啊。我们为指定的字段创建索引之后,当我们根据条件查找数据的时候,数据库引擎就可以利用查找算法(二分查找法)很高效的查出来。

      三:选择什么字段建立索引

      索引也是要占用存储空间的,建立索引的时候也是有一定的规则可寻的。

      1)选择一些经常要作为查询条件的字段。

      2)选择区分度高的字段,count(distinct 字段)/count(*),当然最小就是1了,也就是唯一索引了。这个值越小,查询的效率越高。当这个值大到一定的程度的时候(具体还不是很清楚),数据库就会放弃索引进行全表扫描。你可以想象一下,如果一个表有一百万的数据,其中有一个性别的字段,这个字段只会出现两个值。然后你为该字段建了一个索引,自以为查询性能提升了N倍。其实,你就相当于把一百万条数据按照性别分别放到两个箱子里面,假设每个箱子里面有50万条性别为男的记录,因为这个箱子里面的性别都是一样的,索引也起不了任何作用了,什么二分查找也用不上了,只能用暴力算法解决咯,全表扫描咯。相反,你可以为一个人的身份证号码建立唯一索引,这样就可以从头到尾用二分查找法查找了,效率杠杠滴。

      四:索引缺点

      索引的出现就是为了提高查询效率,就像书的目录。其实说白了,索引要解决的就是查询问题。

      查询,是数据库所提供的一个重要功能,我们都想尽可能快的获取到目标数据,因此就需要优化数据库的查询算法,选择合适的查询模型来实现索引。

      另外,为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间,因为索引也要随之变动。

      1 Reply Last reply Reply Quote
      • First post
        Last post