0. 简介

索引是一类特殊的文件,用来存储检索信息,使数据库查找更加快速。

1. 主键

主键是一类特殊的唯一索引,选择某一列元素作为主键,用来表示每一行元素的特殊性,其特点如下

  • 在一个数据表中只有一个主键;
  • 主键不能为空(null);
  • 主键的列数据不能重复(唯一索引的特点)。

2. 唯一索引

唯一索引是数据库中的一个索引类型,用来保证某列元素的数据唯一性,其特点如下:

  • 一个数据表中可以有多个唯一索引;
  • 唯一索引可以为空(null);
  • 唯一索引的列数据不能重复。

3. 联合索引

当一个索引由多个列组成时,称为联合索引,主要用于快速查找某一特殊元素,其特点如下:

  • 列顺序很重要:ABC和CBA是两类不同的联合索引;
  • 一个数据表中可以有多个联合索引。

4. 索引对数据库操作的影响

索引的使用目的是为了加快查找数据的速度。

  • 读(查找数据)

    通过检索索引文件而不是整个数据库文件,能够加快读数据的速度。
  • 写(更新数据、增删改)

    索引文件是独立于数据文件的,因此在写数据的时候,需要同时更新索引文件和数据文件,因此会降低写数据的速度。

5. 其他索引

5.1 普通索引

和一般索引相比,允许列数据重复,作用是加快数据访问速度。特点如下:

  • 一个数据表中可以有多个唯一索引;
  • 普通索引可以为空(null);
  • 普通索引的列数据能重复。

5.2 全文索引

用来加快对大文本数据关键字的检索,MySQL5.6之后InnoDB也支持该索引。

5.3 前缀索引

仅针对字符串类型的数据,只索引字符串的前几个字符,而不是整个字符串。因此索引文件更小。

6. 总结

对上述的几种索引的特点对比如下所示:

7. 参考资料

参考博客-1

参考博客-2

【后端面经】MySQL主键、唯一索引、联合索引的区别和作用的更多相关文章

  1. Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

    原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不 ...

  2. mysql主键,外键,索引

    主键 唯一而非空,只能有一个 作用: 1.唯一的标识一行  2.作为一个可以被外键有效引用的对象  3.保证数据完整性 设计原则: 1. 主键应当是对用户没有意义的.如果用户看到了一个表示多对多关系的 ...

  3. MySQL主键和索引的联系及区别

    转载自:http://www.nowamagic.net/librarys/veda/detail/1954 关系数据库依赖于主键,它是数据库物理模式的基石.主键在物理层面上只有两个用途: 惟一地标识 ...

  4. MySQL主键与索引的区别和联系

    MySQL主键与索引的区别和联系   关系数据库依赖于主键,它是数据库物理模式的基石.主键在物理层面上只有两个用途: 惟一地标识一行. 作为一个可以被外键有效引用的对象. 索引是一种特殊的文件(Inn ...

  5. MySQL主键设计

    [TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录. MySQL主键设计原则 MySQL主键应当是对用户没有意义的. MySQL主 ...

  6. MYSQL主键自动增加的配置及auto_increment注意事项

    文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二:   点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字 ...

  7. mysql主键问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_22314145/article/details/80824660 MySQL主键 一. MyS ...

  8. 【SqlServer】聚集索引与主键、非聚集索引

    目录结构: contents structure [-] 聚集索引和非聚集索引的区别 聚集索引和主键的区别 主键和(非)聚集索引的常规操作 聚集索引.非聚集索引在SqlServer.MySQL.Ora ...

  9. MySQL主键设计盘点

    目录 主键定义 主键设计和应用原则 主键生成策略 自增ID UUID 自建的id生成器 Twitter的snowflake算法 @ 最近在项目中用了UUID的方式生成主键,一开始只是想把这种UUID的 ...

  10. mybatis框架(6)---mybatis插入数据后获取自增主键

    mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...

随机推荐

  1. 基于列存储的开源分布式NoSQL数据库Apache Cassandra入门分享

    @ 目录 概述 定义 特性 与Hbase对比 Cassandra使用场景 术语 架构 概览 Dynamo 数据集分区使用令牌环的一致性哈希 存储引擎 部署 单实例部署 集群部署 CQL 概述 数据模型 ...

  2. lua快速入门~在js基础上,知道Lua 和 Js 的不同即可

    lua 和 javaScript 差不多的,就是一些语法的细节不同,学过js,再注意一下下面的细节,就能上手了~ 快速入门,可以直接看一下菜鸟教程的lua:https://www.runoob.com ...

  3. SQL里按照年月日分组统计

    Mysql中使用DATE_FORMAT函数实现是相对简单的. 根据format字符串格式化date值.下列修饰符可以被用在format字符串中: %M 月名字(January--December) % ...

  4. [Linux]网络检测工具之iperf

    1 安装网络检测工具 iperf step1.0 iperf的简介 [摘] iperf是一种命令行工具,用于通过测量服务器可以处理的最大网络吞吐量来诊断网络速度问题.它在遇到网络速度问题时特别有用,通 ...

  5. Android HAL机制的深入理解及在Linux上移植和运行的一个好玩的HAL小例子

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   Ubuntu 18.04.x 前言   近一年来, ...

  6. VMware另一个程序锁定文件的一部分,进程无法访问

    问题描述:搭建RAC11g,在做共享磁盘的时候,节点2要共享节点1的磁盘,但是有一个问题,节点2关机之后,再打开,是有一个访问节点1的磁盘的过程,如果访问失败,就会开不了机器 rac1加的三个磁盘: ...

  7. SQL优化(二)-- 慢查询

    1.慢查询日志 MYSQL的慢查询日志是Mysql提供的一种日志记录方式,它主要是用来记录mysql执行语句过程中,响应时间超过阀值的语句,这个阀值可以通过long_query_time去指定,比如说 ...

  8. 帝国cms 随机调取新闻

    <?php $hits_r = $empire->query("select * from {$dbtbpre}ecms_music as t1 join (select rou ...

  9. 前端获取不到环境变量NODE_ENV

    有时候我们期望通过执行不同的 npm script 来区分诸如 dev.prod.uat.sit等多环境下使用的不同变量 今天我也在整环境变量,碰到一个小小的bug.装了 cross-env 但还是没 ...

  10. Object o = new Object();

    对象的创建过程: 1,申请内存,并初始化: 2,构造器初始化: 3,o指向对象. 对象在内存中的存储布局: 使用jol工具打印java对象在内存的存储布局: 其中,对象头的组成: 对象头包括Mark ...