mysql辅助索引和主键索引,mysql 主键 外键 索引

mysql辅助索引和主键索引,mysql 主键 外键 索引,MySQL索引之主键索引

在MySQL中,主键索引和二级索引分别是什么意思,有什么区别?上次,我们介绍了聚集索引和非聚集索引之间的区别。这次继续介绍主键索引和二级索引的区别。

在MySQL中,主键索引和二级索引分别是什么意思,有什么区别?

上次,我们介绍了聚集索引和非聚集索引之间的区别。这次继续介绍主键索引和二级索引的区别。

1、主键索引

主键索引,简称主键,由一列或多列组成,用来唯一标识数据表中的一条记录。一个表可以没有主键,但最多只能有一个主键,主键值不能包含NULL。

在MySQL中,我们在设计InnoDB数据表的主键时通常遵循几个原则:

1.使用无业务用途的自增属性列作为主键;

2.主键字段的值始终不会更新。只有两个操作:添加或删除。

3.不要选择动态更新的类型,如当前时间戳等。

这么做的好处有几点:

1.添加新数据时,因为主键值是顺序增加的,所以innodb页面分裂的概率降低;可以参考之前的分享“[MySQL FAQ]系列InnoDB表为什么要建议使用自增列作为主键”;

2.当业务数据发生变化时,不修改主键值,因此降低了物理存储位置变化的概率,也降低了innodb页面中出现碎片的概率。

MyISAM表是堆组织表,所以主键类型的设计不用那么讲究。

2、辅助索引

二级索引,也就是我们通常所说的索引,原文是二级键。辅助指标可以进一步分为唯一性指标和非唯一性指标。

其实唯一性指标应该叫唯一性约束。它的功能是避免一列或多列值的重复。它是一种约束性指标。

3、主键索引和辅助索引的区别

在MyISAM引擎中,唯一索引和主键索引没有本质区别,只是键值允许NULL。也就是说,在MyISAM引擎中,不存在唯一的空值索引,本质上和主键索引是一回事。

但是在InnoDB引擎中,主键索引和二级索引有很大的区别。主键索引将被选为聚集索引,唯一索引和普通二级索引在存储上除了唯一性约束没有本质区别。

从查询性能来看,MyISAM表中主键索引的查询性能与不允许NULL的唯一索引相当,而通过InnoDB表中唯一索引的查询,则需要多一个从二级索引到主键索引的转换过程。基于普通索引的InnoDB表的搜索成本更高,因为每检索一个结果,至少需要多检索一次,以确认是否有更多符合条件的结果,所以主键索引和唯一索引不需要这样做。

经过测试,MyISAM随机搜索100万行数据(整数类型)时,主键和唯一索引的效率基本相同,普通索引的检索效率慢了30%以上。如果换成InnoDB表,唯一索引的效率比主键索引慢9%左右,普通索引比主键索引慢50%左右。

你想了解MySQL的哪些方面?可以直接留言回复,我会选择一些热点话题分享。同时希望大家多转发。多读书是老叶继续分享的绝佳助力。谢谢:)

mysql辅助索引和主键索引,mysql 主键 外键 索引