MySQL索引之主键索引
作者:mysql中文网 发布时间:2024-01-25 01:52:04
在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?
上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。
1、主键索引
主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。
在MySQL中,InnoDB数据表的主键设计我们通常遵循几个原则:
1、采用一个没有业务用途的自增属性列作为主键;
2、主键字段值总是不更新,只有新增或者删除两种操作;
3、不选择会动态更新的类型,比如当前时间戳等。
这么做的好处有几点:
1、新增数据时,由于主键值是顺序增长的,innodb page发生分裂的概率降低了;可以参考以往的分享“[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键”;
2、业务数据有变更时,不修改主键值,物理存储位置发生变化的概率降低了,innodb page中产生碎片的概率也降低了。
MyISAM表因为是堆组织表,主键类型设计方面就可以不用这么讲究了。
2、辅助索引
辅助索引,就是我们常规所指的索引,原文是SECONDARY KEY。辅助索引里还可以再分为唯一索引,非唯一索引。
唯一索引其实应该叫做唯一性约束,它的作用是避免一列或多列值存在重复,是一种约束性索引。
3、主键索引和辅助索引的区别
在MyISAM引擎中,唯一索引除了key值允许存在NULL外,其余的和主键索引没有本质性区别。也就是说,在MyISAM引擎中,不允许存在NULL值的唯一索引,本质上和主键索引是一回事。
而在InnoDB引擎中,主键索引和辅助索引的区别就很大了。主键索引会被选中作为聚集索引,而唯一索引和普通辅助索引间除了唯一性约束外,在存储上没本质区别。
从查询性能上来说,在MyISAM表中主键索引和不允许有NULL的唯一索引的查询性能是相当的,在InnoDB表通过唯一索引查询则需要多一次从辅助索引到主键索引的转换过程。InnoDB表基于普通索引的查找代价更高,因为每次检索到结果后,还需要至少再多检索一次才能确认是否还有更多符合条件的结果,主键索引和唯一索引就不需要这么做了。
经过测试,对100万行数据的MyISAM做随机检索(整数类型),主键和唯一索引的效率基本一样,普通索引的检索效率则慢了30%以上。换成InnoDB表的话,唯一索引比主键索引效率约慢9%,普通索引比主键索引约慢了50%以上。
关于MySQL的方方面面大家想了解什么,可以直接留言回复,我会从中选择一些热门话题进行分享。 同时希望大家多多转发,多一些阅读量是老叶继续努力分享的绝佳助力,谢谢大家 :)


猜你喜欢
- 为什么程序员都喜欢黑php?如果php经常被人黑,反而是好事!世界上只有两种语言: 没人用的和经常被人喷的。不管你喷也好,黑也好,骂也好,都
- 将Excel与Word集成,无缝生成自动报告毫无疑问,微软的Excel和Word是公司和非公司领域使用最广泛的两款软件。它们实际上是“工作”
- 关于主机名转IP地址只记住两点即可:1、英特网协议一直都是用4字节的IP将包转发给目的地;2、至于主机名是如何转换成IP地址的,这是操作系统
- 导入Git项目 新建项目File–>New–>Project from Version Control–>Git从Git
- 0.目录1.遇到的问题2.创建二维数组的办法•3.1 直接创建法•3.2 列表生成式法•3.3 使用模块numpy创建1.遇到的问题今天写P
- 这篇文章主要介绍了Python socket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 接上篇微信小程序后端搭建:分享:Laravel 微信小程序后端搭建后端搭建好后第一件事就是用户登录认证,简单实现微信小程序登录认证1.use
- 导语hello everyone! I'm kimiko!Miss me???嘿!中秋结束了,开始正式营业给大家继续送福
- 背景我在开发小程序的时候,有需求要实现录音功能,并能上传给服务器。小程序录音功能我是使用的微信的wx.getRecorderManager(
- 1. css背景图1.1 背景属性<!DOCTYPE html><html lang="en">
- 一、实验原理。 本次用代码实现的是ARP网关欺骗,通过发送错误的网关映射关系导致局域网内其他主机无法正常路由。使用scapy中scapy.a
- MaxDB和MySQL是独立的数据库管理服务器。系统间的协同性是可能的,通过相应的方式,系统能够彼此交换数据。要想在MaxDB和MySQL之
- JavaScript 函数调用JavaScript 函数有 4 种调用方式。每种方式的不同方式在于 this 的初始化。this 关键字一般
- 1.Pool资源池的概念Pool资源池的官方文档:https://docs.ceph.com/en/pacific/rados/operat
- 1、Model signalsdjango.db.models.signales 作用于django的model操作上的一系列信号1)pre
- 相关文章ASP.NET Core2.2 中的Configuration配置一ASP.NET Core2.2 中的Configuration配
- mybatis分页插件pageHelper详解及简单实例工作的框架spring springmvc mybatis3首先使用分页插件必须先引
- memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放
- 一行命令搭建一个基于python的http文件传输服务由于今天朋友想要一个文件,而我恰好有,因为这个文件比较大,网速不是很给力,所以想到了p
- ConfigParser库的使用及遇到的坑背景:这几天想在接口测试中增加logging打印功能,在testerHome正好发现有人分享自己的