MySQL索引之主键索引

 更新时间:2015年12月07日 22:57:56   作者:mysql中文网  
在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别

在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的方方面面大家想了解什么,可以直接留言回复,我会从中选择一些热门话题进行分享。 同时希望大家多多转发,多一些阅读量是老叶继续努力分享的绝佳助力,谢谢大家 :)

相关文章

  • MySQL百万级数据分页查询优化方案

    MySQL百万级数据分页查询优化方案

    在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦。
    2017-11-11
  • MySQL性能优化

    MySQL性能优化

    MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化
    2013-02-02
  • MySQL如何更改数据库数据存储目录详解

    MySQL如何更改数据库数据存储目录详解

    这篇文章主要给大家介绍了关于MySQL如何更改数据库数据存储目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 详解mysql中的字符集和校验规则

    详解mysql中的字符集和校验规则

    这篇文章主要介绍了mysql中的字符集和校验规则的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-12-12
  • 详解MySQL中default的使用

    详解MySQL中default的使用

    这篇文章主要介绍了MySQL中default的使用,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • 一文带你理解MySQL TCL 事务控制

    一文带你理解MySQL TCL 事务控制

    本文主要介绍了MySQL TCL事务控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • MySQL分页查询的三种常用方法

    MySQL分页查询的三种常用方法

    在处理数据库查询时,我们经常需要对结果进行分页,以便在用户界面上提供更好的浏览体验,本文主要介绍了MySQL分页查询的三种常用方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • MySQL学习之三大范式详解小白篇

    MySQL学习之三大范式详解小白篇

    本篇文章为大家介绍了MYSQL数据库学习中三大范式的规则详解,有需要的朋友可以借鉴参考下,希望可以对大家的数据库学习有所帮助
    2021-09-09
  • MySQL的索引详解

    MySQL的索引详解

    这篇文章主要介绍了MySQL的索引的一些资料,对于mysql的优化来说索引是不得不说的,这里就为大家介绍一下,需要的朋友可以参考一下
    2018-01-01
  • 详解MySQL中的外键约束问题

    详解MySQL中的外键约束问题

    这篇文章主要介绍了详解MySQL中的外键约束问题,针对在MySQL中使用InnoDB表的情况,需要的朋友可以参考下
    2015-07-07

最新评论