在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的哪些方面?可以直接留言回复,我会选择一些热点话题分享。同时希望大家多转发。多读书是老叶继续分享的绝佳助力。谢谢:)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。