首页 > 数据库 >【后端面经】MySQL主键、唯一索引、联合索引的区别和作用

【后端面经】MySQL主键、唯一索引、联合索引的区别和作用

时间:2023-06-18 11:34:35浏览次数:46  
标签:数据表 数据库 唯一 索引 MySQL 数据 主键

目录

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,数据,主键
From: https://www.cnblogs.com/CrazyPixel/p/17488866.html

相关文章

  • Mysql union和union all用法
    1:什么时候用union和unionall?  我们经常会碰到这样的应用,两个表的数据按照一定的查询条件查询出来以后,需要将结果合并到一起显示出来,这个时候就需要用到union和unionall关键字来实现这样的功能,union和unionall的主要区别是unionall是把结果集直接合并在一起,而union......
  • MySQL 实际项目优化总结
    1. query_cache_size引起的Waitingforquerycachelock问题,严重时会引起数据库宕机A. 优化登录新建时,发现登录性能无法提升但是MySQL资源又较正常时,使用showprocesslist查看发现有部分‘Waitingforquerycachelock’;B. 解决办法:查看配置命令为showvariables......
  • 【后端面经】MySQL主键、唯一索引、联合索引的区别和作用
    (【后端面经】MySQL主键、唯一索引、联合索引的区别和作用)0.简介索引是一类特殊的文件,用来存储检索信息,使数据库查找更加快速。1.主键主键是一类特殊的唯一索引,选择某一列元素作为主键,用来表示每一行元素的特殊性,其特点如下在一个数据表中只有一个主键;主键不能为空(null);......
  • MySQL-hash索引
    1哈希索引原理哈希索引原理其实就是hash表,搜索时间效率O(1),搜索效率好,也意味着磁盘IO花费少,mysql底层使用的是链式哈希表,结构如下,每一个bucket就是一个个哈希桶,也就是哈希链表的头结点。哈希结构天然的需要耗费空间资源,是一种用空间换时间的做法2哈希要点:解决哈希冲突的几种方式再......
  • 云原生之使用Docker部署mysql数据库
    (云原生之使用Docker部署mysql数据库)一、检查系统版本[root@node~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME="CentOSLinux7(Core)"A......
  • in用不用索引,啥时候能用啥时候不能用,一文说清
    in/or到底能不能用索引应该是肯定的,但有时生效有时不生效,这个能不能量化计算?这是本文想讨论和解答的问题。in到底用不用索引感觉像一桩悬疑片!古早时期的面经,统一说不走索引,在一些程序员脑海中从此留下不可磨灭的印记。有些从业时间较长的程序员脑子里的第一反应就是不走索引,上......
  • 花了一周时间,总算把mysql的加锁搞清楚了,再也不怕间隙锁和next-key了
    接触mysql都知道在mysql中有很多锁,共享锁(S)、排他锁(X)、间隙锁(gap)、next-key,当然还有意向锁、表锁等。今天不讲别的,专门来看下innodb引擎下的锁是什么样子的。现在有这样一条sql语句,你知道是什么锁吗?updatetsetname='1'whereid=10;可能会说是锁住id=10的行锁吧,没错行锁是一......
  • 10. docker方式下的mysql设置主从复制(一主两从)
    上一篇【centos使用docker方式安装mysql】笔记中,我们在三个虚拟机中使用docker方式新建了三个mysql容器服务,那么我们这篇文章来记录下,如何在这三台机器中设置mysql的主从复制功能。其中111服务器作为主节点,112和113两个服务器作为两个从节点,复制111服务器mysq......
  • windows下mysql使用mysqldump定时备份数据库,删除过期备份
    windows下mysql使用mysqldump定时备份数据库,删除过期备份创建备份脚本:@echooffforfiles/p"d:\mysql_backup"/mbackup_*.sql-d-7/c"cmd/cdel/f@path"set"Ymd=%date:~0,4%%date:~5,2%%date:~8,2%"cdD:\Mysql\mysql-8.0.18\binmysqldump--opt......
  • 09. centos使用docker方式安装mysql
    一、创建宿主机物理路径新建/mydata/mysql/data、log和conf三个文件夹mkdir-p/mnt/mysql/logmkdir-p/mnt/mysql/datamkdir-p/mnt/mysql/config或者mkdir/mnt/mysql/{log,data,config}二、直接执行下面这个命令,即可创建成功mysql服务dockerrun-p3306:3306--na......