首页 > mysql > mysql索引是如何建立的

mysql索引是如何建立的

作者:bin

mysql创建表时,主键索引是一定会建立的,如果用户没有指定那一列,那么会
1.选一个列非null的唯一索引,的作为主键索引(多个唯一索引,选择第一个)
2.如果1找不,那么会建立一个隐藏索引


 

聚集索引(通常是主键):
索引和存储都是顺序的,并且一个表只能有一个聚集索引
例如主键:存放(id,name)的如下数据
(1, tom),(2,mike),(3,sam),(4,lisa),(5,li)


 

非聚集索引:
索引逻辑顺序和存储顺序不一致,一个表可以有多个顺序索引
例如上面的例子,我们用name做索引:

在我们执行这个sql时,他会现在「非聚集索引」中查找到主键的id,再去「聚集索引」中查找具体的值

select * from user where name = "li"

 

联合索引:
联合索引是多个key作为索引,按从左往右排序,类似sql的 orderby a,b,c
例如存放索引(a,b)的数据,是先根据a排序,在根据b排序:
(1,1)(1,2)(2,1)(2,4)(3,1)(3,2)

如果用(a)或者(a,b)查询那么可以用上索引,例如下面2个都会用索引

select * from user a = 1 and b = 2
select * from user a = 1

如果用(b)就用不上索引了,因为他不是排序的,树无法确定一个范围,例如:

select * from user b = 1

 

自适应hash索引:
自适应hash索引是无序的,mysql会监控二级索引,如果最近频繁被访问到达3次以上,那么会自动生成「自适应hash」索引,即热点数据进行hash缓存。
优点是,可以降低对二级索引对查询次数。
缺点是,无法进行范围查找

存储对方式是通过算法,获取hash(通常都是取mod),然后hash冲突就用链表形式放在一个槽里面,如图:

您必须 [ 登录 ] 才能发表留言!