首页 > 既然有主键,为何还要建索引?

既然有主键,为何还要建索引?

索引在什么情况下需要,既然有主键了,再建立索引会不会显得有些多余?
又或者说,在什么场景下必须得建立索引?


不使用主键进行查询的时候,没有索引就会很慢。

一个简单的例子,某哈希表,根据key来查找很快,但是想根据value来查找怎么办?O(n)?


数据怎么取出跟它怎么存储有关

主键只是不得重复的属性.按照主键查找,只能挨个的对比,找到相等的就ok

而索引呢,不必挨个对比. 就像哈希结构(虽然很多数据库不用哈希作为数据结构,但相似的道理),索引在你存储的时候会在键与"该组数据的物理位置"(就比如C中的数组,存储在连续的区域)建立关系(哈希中叫做哈希函数),这样在查询的时候:输入键->得到数据的位置->在那个位置上取出数据.所以比挨个对比快的多.

因此索引加快了查询,但是减慢了存储(插入,修改). 所以索引适合查询而不适合写数据


主键自带了一个唯一约束 。 约束可以提高搜寻的速度,但是占用空间大。 更新,删除添加速度慢


这个主键和索引并非是两个相同的东西,表中的主键一般作用是用来对记录进行区分的,使得记录可以唯一方便查找。但是又很多时候我们需要查找的并不是主键,而且其他的属性,比如学生表的主键是“学号”,但是我经常要根据学生的“姓名”来进行查询,那么建立索引就会提高查询效率(但相对的插入和删除的效率就会变慢)。

至于什么时候使用索引这个一般是根据场景决定的,索引会加快查询(select)的速度,但是会减慢(insert和delete)的速度,需要自己根据业务和数据权衡使用,很难有定论

【热门文章】
【热门文章】