差异

KEY 或 INDEX 是指正常的非唯一索引 . 允许索引的非不同值,因此索引可以包含索引的所有列中具有相同值的行 . 这些索引不会对您的数据施加任何限制,因此它们仅用于确保某些查询可以快速运行 .

UNIQUE 指的是索引的所有行必须唯一的索引 . 也就是说,对于此索引中的所有列,同一行可能不具有与另一行相同的非NULL值 . 除了用于加速查询之外,UNIQUE索引还可用于强制限制数据,因为数据库系统在插入或更新数据时不允许破坏此不同值规则 .

您的数据库系统可能允许将UNIQUE索引应用于允许NULL值的列,在这种情况下,如果两行都包含NULL值,则允许两行相同(这里的基本原理是NULL被认为不等于它自己) . 但是,根据您的应用程序,您可能会发现这是不合需要的:如果您希望阻止这种情况,则应该禁止相关列中的NULL值 .

PRIMARY 的行为与UNIQUE索引完全相同,只是它始终命名为'PRIMARY',并且表上可能只有一个(并且应该始终有一个;尽管某些数据库系统不强制执行此操作) . PRIMARY索引旨在作为唯一标识表中任何行的主要方法,因此与UNIQUE不同,它不应在任何允许NULL值的列上使用 . 您的PRIMARY索引应该位于足以唯一标识行的最小列数上 . 通常,这只是一个包含唯一自动递增数字的列,但如果还有其他任何可以唯一标识行的列,例如国家/地区列表中的"countrycode",则可以使用该列 .

某些数据库系统(例如MySQL的InnoDB)将按照它们在PRIMARY索引中出现的顺序将表的记录存储在磁盘上 .

FULLTEXT 索引与上述所有索引不同,它们在数据库系统之间的行为差别很大 . FULLTEXT索引仅对使用MATCH()/ AGAINST()子句进行的全文搜索很有用,与上述三种不同 - 通常使用b-tree在内部实现(允许从最左列开始选择,排序或范围)或哈希表(允许从最左侧列开始选择) .

在其他索引类型是通用的情况下,FULLTEXT索引是专用的,因为它用于狭窄的目的:它仅用于“全文搜索”功能 .

相似之处

所有这些索引中可能包含多个列 .

除了FULLTEXT之外,列顺序很重要:要使索引在查询中有用,查询必须使用从左侧开始的索引中的列 - 它不能只使用第二,第三或第四部分索引,除非它还使用索引中的前一列来匹配静态值 . (要使FULLTEXT索引对查询有用,查询必须使用索引的所有列 . )

mysql primary unique_MySQL中的INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?相关推荐

  1. MySQL中INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?

    创建MySQL表时,PRIMARY,UNIQUE,INDEX和FULLTEXT有什么区别? 我将如何使用它们? #1楼 我觉得这已经很好地涵盖了,也许除了以下几点: 如果选择性足够,简单的KEY / ...

  2. SQL Server中唯一索引和唯一约束之间的区别

    This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...

  3. IO多路复用中select、poll、epoll之间的区别

    本文来说下IO多路复用中select.poll.epoll之间的区别 文章目录 什么是IO多路复用 为什么有IO多路复用机制 同步阻塞(BIO) 同步非阻塞(NIO) IO多路复用(现在的做法) 3种 ...

  4. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  5. mysql 迭代更新_MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

    MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...

  6. Java Persistence API中的FetchType LAZY和EAGER之间的区别?

    我是Java Persistence API和Hibernate的新手. Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别? #1楼 我 ...

  7. Vue中computed、methods和watch之间的区别

    对于那些开始学习Vue的人来说,对于方法.计算属性和观察者之间的区别有点混淆. 尽管通常可以使用它们中的每一个来完成或多或少相同的事情,但了解每个人在哪里胜过其他人还是很重要的. 在这个快速提示中,我 ...

  8. .NET中小数,浮点数和双精度之间的区别?

    .NET中的decimal , float和double float什么区别? 有人什么时候会使用其中之一? #1楼 对我来说,这是一个有趣的话题,因为今天,我们遇到了一个讨厌的小错误,涉及到deci ...

  9. Hibernate中保存与持久性以及saveOrUpdate之间的区别

    保存与保存或更新与持久保存在Hibernate中 save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题,就像Hiberna ...

最新文章

  1. 我的第一份vim程序
  2. 牛客 - 配对(贪心+数学)
  3. Frida Android hook
  4. MySQL_数据类型
  5. 大数据_Flink_数据处理_运行时架构5_slot和任务调度---Flink工作笔记0020
  6. 自动驾驶系统的学习笔记
  7. Mac解压Linux压缩.tar.gz文件
  8. Java == 和 equals
  9. 自由空间光通信OptiSystem仿真
  10. java代码注释规范
  11. JST日本压着端子GHD系列线对板连接器PCB封装库(1.25mm间距)
  12. 微信授权扫码点餐-新特性React16
  13. Android学习-指南针(方向传感器)
  14. 红米4A Android 版本,红米4A评测:4A搭载深度定制基于Android6.0.1系统MIUI 8 - 红米4A评测:双11手机单品销量第一 怎么样好不好用?...
  15. Servernbsp;Tomcatnbsp;v7.0amp;nbs…
  16. 记一次idea莫名其妙报错找不到依赖问题
  17. python制作音乐相册_Python数据可视化:网易云音乐歌单
  18. 常用的几种时间系统GMT、UTC等以及使用Python代码GPS时间转UTC时间
  19. Mybatis从入门到精通二(入门详解)
  20. 通过ssh隧道连接mysql

热门文章

  1. 微课|中学生可以这样学Python(例3.1):闰年判断
  2. 使用Python完美管理和调度你的多个任务
  3. Python常用运算符含义与用法演示
  4. C++ C++基础语法入门总结(二)引用-内联函数-C++11新特性
  5. Linux安装jellyfin硬件加速,云芯一号试用:Jellyfin播放H264视频
  6. 力扣332. 重新安排行程(JavaScript)
  7. 什么是ie浏览器_关于几款电脑浏览器的使用感受,你用过吗?
  8. composition java_阿里P7架构师通过源码浅析Java中的资源加载
  9. 如何自建微信外卖平台_外卖平台高抽成的背后,看小程序如何玩转餐饮外卖?...
  10. php recordarray,php5.5新数组函数array-column使用实例